链接:点击打开链接
题意:给出一个n,从1-n中取三个数使得三个数的最小公倍数最大
代码:
#include <iostream>
using namespace std;
long long gcd(long long a,long long b){
if(b==0)
return a;
return gcd(b,a%b);
}
long long lcm(long long a,long long b){
return a/gcd(a,b)*b;
}
int main(){
long long a[50];
long long i,j,k,n,sum;
while(cin>>n){
if(n==1){
cout<<"1"<<endl;
continue;
}
if(n==2){
cout<<"2"<<endl;
continue;
}
if(n==3){
cout<<"6"<<endl;
continue;
}
sum=-1;
for(i=n;i>=n-5;i--)
for(j=i-1;j>=n-5;j--)
for(k=j-1;k>=n-5;k--) //这个最大的肯定是最大几个数相乘,因此将前几个数排列组合
sum=max(sum,lcm(lcm(i,j),k));//再比较一下就行
cout<<sum<<endl; //这是某个大神的做法,详见http://blog.csdn.net/u011475002/article/details/47084339
} //这个才是正确做法,不推荐使用我这个
return 0;
}