码迷,mamicode.com
首页 > 其他好文 > 详细

最大最小公倍数

时间:2016-01-31 21:43:41      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

问题描述

已知一个正整数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;
}

 

最大最小公倍数

标签:

原文地址:http://www.cnblogs.com/maxiaobao/p/5173900.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!