算法训练 最大最小公倍数
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
代码
#include <stdio.h>
#include <stdlib.h>
int main() {
long long N,n;
scanf("%lld",&N);
if(N%2!=0)
n=N*(N-1)*(N-2);
else if(N%3==0)
n=(N-1)*(N-2)*(N-3);
else
n=N*(N-1)*(N-3);
printf("%lld",n);
return 0;
}
思考
这道题纯粹考数学思想喂(数学极差的本人直接躺平百度)
关键点就是知道最小公倍数n=三数互质
所以这里可分为两大种情况:
(1)奇数:n=N*(N-1)*(N-2)【最大的三数互质】
(2)偶数:N和N-2非互质不可相乘(公因数2) n=N*(N-1)*(N-3);当N为3的倍数时N和N-3非互质不可相乘(公因数3)n=(N-1)*(N-2)*(N-3)
需要注意的是输入数N和最小公倍数n的类型 int和long都不可 只能用long long(大概是溢出