每日刷题(五十五)
ALGO-2、最大最小公倍数
两个数的最小公倍数就是两个数的乘积除以最大公约数,最大公约数就是两个数的最大的相同因子。如果两数互质,那么他们的最小公倍数是他俩的乘积
这个题需要仔细分析,考虑N是奇数还是偶数
1、如果N是奇数,那么他们的最小公倍数最大可以使N * (N - 1) * (N - 2)
2.1、如果N是偶数,那么他们的最小公倍数最大是多少呢,这就需要思考了
因为N是偶数,N - 1肯定是奇数,N - 2又是偶数,偶数和偶数之间可不互质,所以我们需要把N - 2 换成 N - 3,即为N * (N - 1) * (N - 3),就是2.2的情况,那么问题又来了,如果N是3的倍数,那么从贪心的角度看,我们先前是考虑N - 2的值,现在我们应该考虑N的值是否发生变化使得式子成立,
即改为(N - 1) * (N - 2) * (N - 3)
2.2、最小公倍数最大为N * (N - 1) * (N - 3),为什么不考虑除3以外的数字呢,因为其他数字不会是3的倍数,这点很容易理解
这里需要注意的一点:因为N的上限很大,我们需要采用long long型
详细C代码如下:
#include<stdio.h>
int main()
{
long long N;
scanf("%lld", &N);
int i;
if(N <= 3)
{
long long sum = 1;
for(i = 1; i <= N; i++)
{
sum *= i;
}
printf("%d\n", sum);
return 0;
}
if(N % 2) //奇数
{
printf("%lld\n", (N * (N - 1) * (N - 2)));
}
else if(N % 3) //偶数,不能被3整除
{
printf("%lld\n", (N * (N - 1) * (N - 3)));
}
else
{
printf("%lld\n", ((N - 1) * (N - 2) * (N - 3)));
}
return 0;
}
部分运行结果如下: