求1 n的最大最小公倍數 貪心水題

2021-10-24 14:25:55 字數 1102 閱讀 4551

試題 演算法訓練 最大最小公倍數

資源限制

時間限制: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三個數,它們的最小...