几天以前,我学习了最小公倍数。玩得挺久了,想换换口味。
我不想用太多的数字,我想从1到n中选三个数字(可以相同)。使得他们的最小公倍数最大。
单组测试数据。 第一行有一个整数n (1≤n≤1,000,000)。
输出一个整数表示选三个数字的最大的最小公倍数。
9 7
504210
学习点:相邻的数是互质的。
所以为了保证三个数的最大公倍数最大,所以就从n开始找呗。
如果n小于3,单独判断。
如果n为奇数,那么n,n-1,n-2这三个数就可以。
如果n为偶数,n-2与n不是互质的,我们选择n-3. 所以n,n-1,n-3。但是这里又有问题了,如果n%3==0的话,n与n-3还不是互质的。继续n-4?
不可能的,这样永远不是互质。我们往后取。也就是取n-1,n-2和n-3这三个数。
#include<bits/stdc++.h> using namespace std; int main() { long long n; while(cin>>n) { if(n==1) cout<<"1"<<endl; else if(n==2) cout<<"2"<<endl; else { if(n%2==1) { cout<<n*(n-1)*(n-2)<<endl; } else { if(n%3==0) cout<<(n-1)*(n-2)*(n-3)<<endl; else cout<<n*(n-1)*(n-3)<<endl; } } } }