问题描述
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
思路
1.首先我想到的是最接近n的三个数肯定是最小公倍数最大的,然后就写了个程序求这三个数的最小公倍数,然而发现我天真了,没有认真分析数据。
2.从别人的代码学习了之后
发现对于n是奇数来说,最接近n的三个数是奇偶奇,那么肯定是这三个数的最小公倍数最大(因为只可能有两个奇数可能有公倍数,但是n和n-2不可能同时能被3整除)。
那么对于n是偶数来说,n和n-2有公因子2,因此取n-3,但这个时候又要注意n和n-3是否有公因子3(即n能被3整除否),如果有的话,那就取n-1开始的三个数
代码
#include
using namespace std;
int main()
{
long long n;//这里我竟然刚开始用的int,不够大啊哥
cin>>n;
if(n <= 2)
cout<
else
{
if(n % 2 != 0)
cout<
else
{
if(n % 3 != 0)
cout<
else
cout<
}
}
return 0;
}
心得
1.要认真分析数据,不能盲目下判断
2.数据类型的大小掌握得不够好,我用int虽然没有越界,但是在运算的时候可能会存在强制类型转换的问题(因为最小公倍数可能已经超过int的范围了)