藍橋杯 ALGO-2 最大最小公倍數
阿新 • • 發佈:2019-01-05
題幹
問題描述
已知一個正整數N,問從1~N中任選出三個數,他們的最小公倍數最大可以為多少。
輸入格式
輸入一個正整數N。
輸出格式
輸出一個整數,表示你找到的最小公倍數。
樣例輸入
9
樣例輸出
504
資料規模與約定
1 <= N <= 10
題解
貪心演算法只做當下最好的選擇,既然是求 1 ~ n 間最大的最小公倍數,肯定最先考慮的是 n*(n-1)*(n-2),但是分幾種情況
- 如果 n 是個奇數,那麼剛好其最大最小公倍數就是 n*(n-1)*(n-2)
- 如果 n 是個偶數,n-2 肯定也是個偶數,n 與 n-2 有公約數 2,n(n-1)(n-2) 就不可能是最小公倍數,退而求其次,讓 n-2 變為奇數,即最大最小公倍數為 n(n-1)(n-3)
- 上面的結論還有問題,如果 n 是個偶數,又剛好是 3 的倍數,那麼 n-3 肯定也是 3 的倍數,n(n-1)(n-3) 就不可能是最小公倍數,只好再退而求其次,(n-1)(n-2)(n-3)
- 最最最後一個問題,如果…n 為 2 或者 1 呢?n=2 最小公倍數就是 2 吧,n=1 公倍數就是 1 吧
等等再看看範圍,10 ,結果 int 肯定存不下了,建議直接定義 long long 變數算了
#include<iostream>
using namespace std;
int main(){
long long n;
long long ans;
cin>>n;
if(n<=2)
ans = n;
else if(n%2==1)
ans = n*(n-1)*(n-2);
else if(n%3==0)
ans = (n-1)*(n-2)*(n-3);
else
ans = n*(n-1)*(n-3);
cout<<ans;
return 0;
}