問題:
問題描述輸入格式已知乙個正整數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的時...