算法训练 最大最小公倍数
时间限制:1.0s 内存限制:256.0MB
锦囊1
使用贪心来选择。
锦囊2
当n为奇数时,答案一定是n*(n-1)*(n-2)。
当n为偶数时,答案可能是(n-1)*(n-2)*(n-3),也可能是n*a*b,其中a>=n-3。
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
作者注释:注意提干的数据规模,选用long long数据类型。
1 /* 2 当n是奇数时,n和n-2都是奇数,n-1是偶数,那么他们三个的公约数 3 肯定不是2,而因为这三个数是连续的,所以大于2的数都不可能成为 4 他们或其中任意两个数的公约数了——即当n为奇数,结果就是n*(n-1)*(n-2). 5 而当n为偶数时,因为n和n-2都是偶数,那么只能将n-2改成n-3, 6 即n*(n-1)*(n-3),如果这三个数两两互质那么肯定就是结果了,若不行则将n-3改 7 为n-4,如此检测下去知道满足两两互质. 8 */ 9 #include<stdio.h> 10 int main(){ 11 long long N; 12 long long answer; 13 scanf("%lld",&N); 14 if(N<=2) 15 answer = N; 16 else if(N==3) 17 answer = 6; 18 else if(N%2==1)//若N为奇数 19 answer = N*(N-1)*(N-2); 20 else{//若N为偶数 21 if(N%3==1) 22 answer = N*(N-1)*(N-3); 23 else 24 answer = (N-3)*(N-1)*(N-2); 25 } 26 printf("%lld",answer); 27 }