51nod1419 最小公倍数挑战 数论

题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
收藏
关注

几天以前,我学习了最小公倍数。玩得挺久了,想换换口味。

我不想用太多的数字,我想从1n中选三个数字(可以相同)。使得他们的最小公倍数最大。




Input


单组测试数据。第一行有一个整数n (1≤n≤1,000,000)。


Output


输出一个整数表示选三个数字的最大的最小公倍数。


Input示例


97


Output示例


504210



思路:三个数的最小公倍数最大,那么就尽可能找到三个最大的互质的数。
①相邻数互质
②如果是奇数,相隔一位的数也互质 , 所以奇数时答案为 : n * (n-1)*(n-2)
③如果是偶数,答案为n*(n-1)*(n-3)。
但是又出现一个问题,n 和 (n-3) 当n % 3 == 0 时不互质。所以有多一种情况
④当n%3==0时,答案为 (n-1)*(n-2)*(n-3)

Code:
#include <bits/stdc++.h>
#define LL unsigned long long 
using namespace std;
int main(){
    LL n;
    cin >> n ;
    if( n == 1 || n == 2 ) cout << n << endl;
    else if( n & 1 ){
        cout << n * (n-1) * (n-2) << endl;
    }else{
        if( n % 3 ){
            cout << n * ( n - 1 ) * ( n - 3) << endl;
        }else{
            cout << ( n - 1 ) * ( n - 2 ) * (n-3) << endl;
        }
    }
    return 0 ;
}

猜你喜欢

转载自blog.csdn.net/frankax/article/details/79952175