• 最大最小公倍数


    问题描述

    已知一个正整数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;
    }
  • 相关阅读:
    docker查看位置和占用大小
    Edgex设置日志文件时区
    VC6.0 MFC Unhandled exception in ***.exe(OLE32.DLL):0xC0000005:Access Violation
    QEMU树莓派下配置及安装软件-3
    windows下QEMU扩展树莓派分区大小-2
    windows下QEMU安装树莓派-1
    golang 升级 1.16.5 之后,编译报错 missing go.sum entry for module providing package
    linux 下 go安装问题
    EdgeX armhf编译问题
    一个SPI从机收到的前三个字节一直为0的问题
  • 原文地址:https://www.cnblogs.com/maxiaobao/p/5173900.html
Copyright © 2020-2023  润新知