算法训练 最大最小公倍数

问题描述

已知一个正整数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(大概是溢出

posted @ 2020-02-11 15:00  Shawuila  阅读(142)  评论(0编辑  收藏  举报