演算法訓練 最大最小公倍數(數論)

2022-03-05 10:43:06 字數 1283 閱讀 1720

問題描述

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

輸入格式

輸入乙個正整數n。

輸出格式

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

樣例輸入

9樣例輸出

504資料規模與約定

1 <= n <= 106。

思路:若n 和 n-1和n-2 三個數 兩兩互質的話,那麼結果就是這三個數的積。

根據數論知識:任意大於1的兩個相鄰的自然數都是互質的.

我們可以知道,當n是奇數時,n 和n-2都是奇數,n-1是偶數,那麼他們三個的公約數肯定不是2,而因為這三個數是連續的,所以大於2的數都不可能成為他們或其中任意兩個數的公約數了.結果就是他們三個的乘積.

標記1而當n為偶數時,n*(n-1)*(n-2)肯定不行了,因為n和n-2都是偶數,那麼只能將n-2改成n-3,即n*(n-1)*(n-3),如果這三個數兩兩互質那麼肯定就是結果了.

標記2但是因為n和n-3相差3,所以當其中乙個數能被3整除時,另乙個肯定也可以.而當其中乙個不可以時,另乙個肯定也不可以.而因為n為偶數,n-3為奇數,所以2不可能成為他倆的公因子。對於大於3的數,肯定就都不可能成為這三個數或者其中任意兩個數的公約數了.因此只需再對3進行判斷:

標記3如果n能整除3,那麼,n*(n-1)*(n-3)就肯定不行了,因為n和n-3有了公約數3,結果肯定小了,那麼就只能繼續判下乙個即n*(n-1)*(n-4)而這樣n-4又是偶數,不行繼續下乙個n*(n-1)*(n-5) = n^3 -6*n^2 + 5*n 而如果這個可以 那個其值肯定要小於(n-1)*(n-2)*(n-3) = n^3 -6*n^2+11n-6(對於n>1來說都成立),而(n-1)*(n-2)*(n-3)由上乙個奇數結論可知是乙個符合要求的,因此到n-5就不用判斷了。直接選答案為(n-1)*(n-2)*(n-3);

標記4而n不能整除3,那麼結果就是n*(n-1)*(n-3),因為n和n-3都不能整除3,此時n-1能不能整除3都無關緊要了.而對於其它數 都是不可能的.上面已證.

ac**:

#includeint

main()

long

long k = n * (n-1) * (n -judge);

if(temp >k)

printf(

"%lld

", temp);

else

printf(

"%lld

", k);

}else

return0;

}

view code

****

演算法訓練 最大最小公倍數 數學

演算法訓練 最大最小公倍數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9 樣例輸出 504資料規模與約定 1 n 106。...

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

時間限制 1.0s 記憶體限制 256.0mb 問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9樣例輸出 504資料規模與約定 1 n 106。找最大的三個兩兩互質的數,大於...

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

問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9 樣例輸出 504資料規模與約定 1 n 106。很水的一道題,想通如果是偶數的情況就搞定了,另外要注意下資料很大,需要lon...