最大最小公倍数

问题描述

已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。

输入格式

输入一个正整数N。

输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定

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;
}

 

posted @ 2016-01-31 20:33  马小宝  阅读(509)  评论(0编辑  收藏  举报