最大最小公倍數

2021-07-30 11:45:53 字數 1207 閱讀 9282

問題描述

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

輸入格式

輸入乙個正整數n。

輸出格式

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

樣例輸入

9樣例輸出

504資料規模與約定

1 <= n <= 106。 

#include

#include

#include

using namespace std;

int main()

else if(n%3!=0)//n不可以被3整除

else

printf("%lld\n", l);

}return 0;

}一看給的資料範圍那麼大,時間還1s,暴力是絕對超時的,這時候就要想,肯定是有數學規律在的。要清楚下面兩個定理:

定理1:大於1的兩個相鄰的自然數必定互質

定理2:兩個數的最小公倍數在最大的情況就是當兩個數互質的時候,他們的最小公倍數就是這兩個數的乘積

這時候就好了,我們需要找三個互質的數,讓他們三個乘積最大就ok啦,肯定是從n往下乘了,但這時候三個連續的數,有兩種情況使其互質

1. 偶 x 奇 x 偶

2. 奇 x 偶 x 奇

這時候就考慮n的奇偶性了:

1. n為奇數

此時,n*(n-1)*(n-2)中,n,n-2為奇數,n-1為偶數,即肯定不存在公因數2,因為這三個連續的數變化範圍不超過3,所以就算有乙個數是3的倍數,也不會存在第二個數是3的倍數,即這三個數字都是互質的。

2. n為偶數

此時,n*(n-1)*(n-2)中,有兩個偶數,即存在公因數2,也就是說最小公倍數要除2了,就不是最大了的。所以不能存在偶 x 奇 x 偶這種情況,就讓(n-2)變為(n-3),大的數盡量不變嘛,這時候呢,又恢復到了奇 x 偶 x 奇的情況。

此時要考慮了,n和n-3之間,差了3,即如果n是3的倍數,n-3也一定是3的倍數,所以當n不是3的倍數的時候,n*(n-1)*(n-3)是ok的

當n是3的倍數的時候,(n-1)(n-2)(n-3),又恢復了奇 x 偶 x 奇的情況了,ok!

最大最小公倍數

時間限制 1 sec 記憶體限制 128 mb 提交 125 解決 4 提交 狀態 討論版 題目描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入 每個測試點 輸入檔案 存在多組測試資料。每個測試點的第一行為乙個整數task,表示測試資料的組數。在一組測試資料中 ...

最大最小公倍數

題目 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n 輸出格式 輸出乙個整數,表示你求得的最小公倍數 樣例輸入 樣例輸出 504注釋 504 9 8 7 資料規模與約定 1 n 106 分析 題目要求涉及貪心演算法,對於個人而言,更像是乙個純數...

最大最小公倍數

思路 首先看兩個定理 1 兩個互質數的最小公倍數是他們的乘積 2 相鄰的兩個數互質。那麼如果想讓這兩個數的最小公倍數盡可能大,就找互質的就可以了,三個數也是同樣。互質數越大,最小公倍數也就越大,於是我們從大的數開始找互質的三個數。1.如果n 是奇數,那麼n,n 1,n 2 就互質。2.如果n是偶數,...