标签:
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入一个正整数N。
1 <= N <= 106。
解决方法:
看了这个题后觉得结果一定是n*(n-1)*(n-2),后来觉得自己想的太简单了,到现在也不太懂贪心算法的应用。
这个题目是说从1~N中选三个数,这三个数的最小公倍数最大。
如果是最小公倍数的话那么这三个数一定互质,也就是没有共同的公约数。
如果N是个奇数的话,n,n-1,n-2,一定是互质的,所以最小公倍数是n*(n-1)*(n-2)并且是最大的。
如果N是个偶数的话,例如 4: 2 3 4 中2 和4 有公约数 2, 公倍数 4*3*2/2 = 4*3*1 = n*(n-1)*(n-3)
例如 6: 4 5 6 中4 和6 中有公约数2 ,3 公倍数 5*4*3 = (n-1)*(n-2)*(n-3)
例如 8:6 7 8 中6 和8 有公约数2, 公倍数 n*(n-1)*(n-3)
if(被三整除){
公倍数 = (n-1)*(n-2)*(n-3)
}else{
公倍数 = n*(n-1)*(n-3)
}
#include<stdio.h> int main(){ long long n; //长整形定义 scanf("%lld",&n); // 长整形输入 if(n<=2){ printf("%I64d",n); // 输出 注意格式!!! }else{ if(n%2!=0){ // 当n时奇数时 printf("%I64d",n*(n-1)*(n-2)); }else if(n%3!=0){ // n是偶数时 不能被三整除 printf("%I64d",n*(n-1)*(n-3)); }else{ printf("%I64d",(n-3)*(n-1)*(n-2)); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/maxiaobao/p/5173900.html