藍橋杯演算法訓練 最大最小公倍數

2021-08-20 07:16:59 字數 2551 閱讀 5387

問題:

問題描述

已知乙個正整數n,問從1~n中任選出三個數,他們的最小公倍數最大可以為多少。

輸入格式

輸入乙個正整數n。

輸出格式

輸出乙個整數,表示你找到的最小公倍數。

樣例輸入

樣例輸出

資料規模與約定

1 <= n <= 10^6。

這道題在想的時候就想到用常規辦法來寫,但是寫到一半發現套用了4層迴圈,在回過頭來看一下,資料規模最大為10的6次方。常規方法肯定是不行的,但是我還是用常規辦法寫了出來想測試一下,下面這串**在n為500以內還是能算出來的。但是放在藍橋杯裡面全部都是執行超時。

//執行超時,不可行

#include

using

namespace

std;

int main()

if (i * j / temp > temp1)

temp1 = i * j / temp;

for (int z = 1; z <= (temp1 > k ? k : temp1); z++)

if (temp1 * k / temp2 > te***)

te*** = temp1 * k / temp2;

} }}

cout

<< te*** << endl;

system("pause");

return

0;}

需要了解:

判斷互質數的五種方法:(引用用此處)

一. 概念判斷法

公約數只有1的兩個數叫做互質數。根據互質數的概念可以對一組數是否互質進行判斷。如:9和11的公約數只有1,則它們是互質數。

二. 規律判斷法

根據互質數的定義,可總結出一些規律,利用這些規律能迅速判斷一組數是否互質。

(1)兩個不相同的質數一定是互質數。如:7和11、17和31是互質數。

(2)兩個連續的自然數一定是互質數。如:4和5、13和14是互質數。

(3)相鄰的兩個奇數一定是互質數。如:5和7、75和77是互質數。

(4)1和其他所有的自然數一定是互質數。如:1和4、1和13是互質數。

(5)兩個數中的較大乙個是質數,這兩個數一定是互質數。如:3和19、16和97是互質數。

(6)兩個數中的較小乙個是質數,而較大數是合數且不是較小數的倍數,這兩個數一定是互質數。如:2和15、7和54是互質數。

(7)較大數比較小數的2倍多1或少1,這兩個數一定是互質數。如:13和27、13和25是互質數。

三. 分解判斷法

如果兩個數都是合數,可先將兩個數分別分解質因數,再看兩個數是否含有相同的質因數。如果沒有,這兩個數是互質數。如:130和231,先將它們分解質因數:130=2×5×13,231=3×7×11。分解後,發現它們沒有相同的質因數,則130和231是互質數。

四. 求差判斷法

如果兩個數相差不大,可先求出它們的差,再看差與其中較小數是否互質。如果互質,則原來兩個數一定是互質數。如:194和201,先求出它們的差,201-194=7,因7和194互質,則194和201是互質數。

五. 求商判斷法

用大數除以小數,如果除得的餘數與其中較小數互質,則原來兩個數是互質數。如:317和52,317÷52=6……5,因餘數5與52互質,則317和52是互質數。

題目分析:

找出三個互質的最大數,直接相乘就得到了最大的最小公倍數,從上面可以看出兩個連續的自然數一定是互質數、相鄰的兩個奇數一定是互質數,

上面這種是奇數情況下,那偶數情況下呢,要滿足三個數都為互質數可以將三個數前移,即 (n-1)(n-2)(n-3),

這時又符合當n為奇數時的情況,但是並不能保證此時最大,

因為還有 n*(n-1)(n-3) 這種明顯看起來比 (n-1)(n-2)*(n-3)的情況大,更加符合條件,但是這種並不能完全保證三個數互質,那什麼情況下能保證互質呢?

當為 n*(n-1)*(n-3)。 此時n跨越了3的迴圈,如果說他們不互質的話那麼唯一的可能約數就是3了,所以這裡只要判斷是n是否是3的倍數即可如果是3的倍數的話,那麼(n-1) * (n-2) * (n-3)明顯要大,而n * (n-1)* (n-3)並不互質。若是n不是3的倍數,則n* (n-1)* (n-3)大,從上面我們就可以分析出

**:

#include 

using

namespace

std;

int main()

cout

<< ans << endl;

system("pause");

return

0;}

對於我:

藍橋杯 演算法訓練 最大最小公倍數

演算法訓練 最大最小公倍數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9 樣例輸出 504資料規模與約定 1 n 106。...

藍橋杯 演算法訓練 最大最小公倍數

問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9樣例輸出 504資料規模與約定 1 n 106。參考 當n為奇數時,答案一定是n n 1 n 2 當n為偶數時,答案是n a ...

藍橋杯 演算法訓練 最大最小公倍數

問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9樣例輸出 504資料規模與約定 1 n 106。思路 首先,從題目的資料規模可以看出題目存在乙個特殊的情形,就是當n小於3的時...