蓝桥杯 - 算法训练 - ALGO-2 最大最小公倍数

来源:互联网 发布:淘宝10000点券多少钱 编辑:程序博客网 时间:2024/05/21 21:41

题目大意:给定一个n,让你从1到挑选三个数使其的最小公倍数最大。

思路:本题可以看做是数论知识的一个运用。

首先我们应该明白这样一个道理:任意大于1的两个相邻的自然数都是互质的.

所以下面我们来讨论n*(n-1)*(n-2)是否两两互质,如果两两互质,那么即使这三个数,否则我们就要继续讨论。

先讨论n的奇偶。

1.对于n为奇数时,那么n和n-2为奇数,则三个数不能被2整除也不能被三整除,大于3的数更不可能。

2.对于n为偶数时,由于n和n-2为偶数,那么这三个数不可取,我们要考虑n*(n-1)*(n-3)的情况。对于此时,这三个数肯定不能被2整除,那么我们就需考虑n和n-3是否能被3整除了。假如n不能被3整除,那么答案就是n*(n-1)*(n-3),如果可以被3整除,那么继续考虑(n-4)的情况,此时出现两个偶数,不可取,继续(n-5)的情况,由于(n-1)*(n-5)*n < (n-1)*(n-2)*(n-3),而后者有回归到1的情况,所以取(n-1)*(n-2)*(n-3).

#include <iostream>#include <cstdio>#include <cstring>using namespace std;long long n;int main(){    scanf("%I64d",&n);    if(n<=2)        printf("%I64d\n",n);    else{        if(n%2)            printf("%I64d\n",n*(n-1)*(n-2));        else{            if(n%3)                printf("%I64d\n",n*(n-1)*(n-3));            else                printf("%I64d\n",(n-1)*(n-2)*(n-3));        }    }    return 0;}


1 0