OJ题目:click here~~
题目分析:找三个不超过n的数字(数字可以相同),使得最小公倍数(LCM)最大。输出这个LCM 。
为了那个伟大的计划,再简单的题目都要记录下来,请某人不要鄙视我。。。。
AC_CODE
const int maxn = 1000008 ;
LL ans[maxn] ;
LL gcd(int x , int y){
return y == 0 ? x : gcd(y , x%y) ;
}
LL answer(LL n){
if(n == 1) return 1 ;
if(n == 2) return 2 ;
if(n == 3) return 6 ;
LL i , s = n * (n - 1) ;
for(i = n - 2 ;i >= 1 ; i--){//两个数互素就是gcd==1咯
if(gcd(i , n) == 1 && gcd(i , n - 1) == 1) return s * i ;
}
}
LL dfs(LL n){
if(ans[n] != -1) return ans[n] ;
return ans[n] = max(dfs(n-1) , answer(n)) ;
}
int main(){
LL n ;
memset(ans , -1 , sizeof(ans)) ;
ans[1] = 1 ;
ans[2] = 2 ;
ans[3] = 6 ;
while(cin >> n){
cout << dfs(n) << endl ;
}
return 0 ;
}