问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
解题思路:
当两个数互质时,它们的最小公倍数最大,且三个正整数的最小公倍数最大时为这三个数的乘积。考虑到互质问题,这里就需要讨论一下N的奇偶性。当N为奇数时,N - 1为偶数,N - 2为奇数,相邻的两个正整数互质,N * (N - 1) * (N - 2)即为所求。当N为偶数时,当N >3时,N 和当N - 3不一定互质,因此偶数时分为两种情况:当3不能整除N时,N * (N - 1) * (N - 3)为所求。当3能整除N时,最佳为(N - 1) * (N - 2) * ( N - 3)。
代码如下:
#include <stdio.h>
int main(){
long long N,ans;
scanf("%lld",&N);
if(N<=2)return N;
if(N%2!=0)
{
ans=N*(N-1)*(N-2); //N为偶数
}
else{
if(N%3!=0)
ans=N*(N-1)*(N-3);//N能被3整除
else
ans=(N-1)*(N-2)*(N-3);//N不能被3整除
}
printf("%lld",ans);
return 0;
}