試題 演算法訓練 最大最小公倍數
資源限制
時間限制:1.0s 記憶體限制:256.0mb
問題描述
已知乙個正整數n,問從1~n中任選出三個數,他們的最小公倍數最大可以為多少。
輸入格式
輸入乙個正整數n。
輸出格式
輸出乙個整數,表示你找到的最小公倍數。
樣例輸入
9樣例輸出
504資料規模與約定
1 <= n <= 106。
分析
第一想法
剛開始看到這個題目的時候第一想法就是列舉1~n中任意三個數,然後求它們的最小公倍數,從這些最小公倍數中再選擇最大的乙個即為正確答案,可是1<=n<=106,如果要列舉任意三個數,最簡單的做法就是三個巢狀的for迴圈,這樣的話時間複雜度為o(n3),會執行超時的。
正確解答
數學知識:如果三個數互為質數,那麼這三個數的乘積便為它們的最小公倍數。
因為本題目中要求最小公倍數的最大值,那麼可以直接從n向前看,找三個連續的互為質數的數,那麼它們的乘積便是1~n最小公倍數的最大值。
有以下二種情況:``
(1)、當n為奇數時,那麼n,n-1,n-2互為質數,很明顯nn-1n-2是1~n最小公倍數的最大值。
(2)、當n為偶數時,且能被3整除時,n-1,n-2,n-3互質,此時n-1n-2n-3是1n最小公倍數的最大值;當n為偶數時,但不能被3整除時,n,n-1,n-3互質,此時n*n-1*n-3是1n最小公倍數的最大值。
#include
using
namespace std;
typedef
long
long ll;
intmain()
else
cout
}
最大的最小公倍數
例如當n 5 時,不大於5的數為1 2 3 4 5。則應該選3 4 5三個數,它們的最小公倍數是60,在所有取法中是最大的。因此我們得到結果60。是不是很簡單?抓緊時間 ac 吧。7 這個題的意思就是要我們在1 n的範圍內找三個數,使他們的最小公倍數在這個範圍內的組合是最大的。那麼你的第一印象是什麼...
最大的最小公倍數
演算法訓練 最大最小公倍數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9 樣例輸出 504 資料規模與約定 1 n 106...
最大的最小公倍數
描述 高中時我們對最小公倍數就已經很熟悉了,相信你很快就可以把這個問題解決。這次的問題是 給你乙個正整數n,任取三個不大於n的正整數,取法不限,每個數可取多次,使得取到的這三個數的最小公倍數在所有取法中是最大的。例如當n 5 時,不大於5的數為1 2 3 4 5。則應該選3 4 5三個數,它們的最小...