問題描述
已知乙個正整數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是偶數,...