蓝桥杯 ALGO-2 最大最小公倍数(Python代码)

  • 蓝桥杯

    • ALGO-2最大最小公倍数

    • 资源限制

      时间限制:1.0s   内存限制:256.0MB

      问题描述

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

      输入格式

      输入一个正整数N。

      输出格式

      输出一个整数,表示你找到的最小公倍数。

      样例输入

      9

      样例输出

      504

      数据规模与约定

      1 <= N <= 106。

    • 前提知识:

      • 1. 最小公倍数

        • k个数字的最小公倍数不会超过k个数字相乘
      • 2. 互质

        • 什么是互质?

          • 两个数的公约数只有一,这样的数叫互质数。两两互质,就是几个数的公约数只有一
        • 互质的性质
          • 如果几个数两两互质,那么他们的最小公倍数是他们的乘积。
        • 互质的判别
          • ① 相邻的两个自然数是互质数。如 15与 16
          • ② 相邻的两个奇数是互质数。如 49与 51
      • 3. 整除

        • a 整除 b,是指 b÷a 的商没有余
    • 逻辑:

      • 找到1~N内三数相乘的最大最小公倍数,首先要知道任意 k 个数的最小公倍数不会超过这 k 个数相乘。如果我们想要找到最大的最小公倍数,这三个数应该满足

        • ①1~N内尽可能靠近N

        • ②它们的最小公倍数是它们相乘(即互质)

      • 问题转为:如何找到在 1~N 内最大的互质的三个数?
      • 我们由数学知识可知:
        • Ⅰ)相邻的自然数互质
        • Ⅱ)相邻的奇数互质
      • 既然要靠近N,那么我们直接先假设 N 为其中的一个数,然后接着判断 N-1、N-2 ... :
      • 当 N 是奇数时:

        • N、N-1、N-2为 奇-偶-奇 的组合,由之前的数学知识 Ⅰ、Ⅱ 很容易知道这样的组合一定是互质的,所以最大最小公倍数就是 N*(N-1)*(N-2)
      • 当 N 是偶数时:

        • 1. N、N-1、N-2中,N和N-2一定有公约数2,不互质,不行。我们考虑用 N-3 去替代其中的一个数字,为了使这三个数相乘最大,我们先尝试用 N-3 代替最小的 N-2(贪心)
          • 现在考虑的数字变为 N、N-1、N-3。
            • 如果 3 不整除 N 的话,N、N-1、N-3 是 偶-奇-奇组合,这里只要 偶和奇 互质,它们就全部互质了。故答案为 N*(N-1)*(N-3)
            • 但如果 3 能整除 N 的话,那么 3 同样能整除 N,这样 N 和 N-3 一定有公约数 3 就不互质了,不行。
              • 同理,如果我们尝试用 N-4、N-5 .... 去代替 N-1 ,你会发现它们又可能有公约数 4、5...,比之前用 N-3 去替代的结果还差(数字更小,公约数还更大,公倍数当然越小啦)。
            • 2. 所以这时候我们要考虑用 N-3 去替代之前 N、N-1、N-2 中的别的数字。现考虑用 N-3 代替 N-1(贪心)
              • 现在我们考虑的数字变为 N、N-2、N-3,此时 3 是能整除 N 的, 3也是能整除 N-3 的 ,所以肯定是不行滴。
            • 3. 最终我们考虑用 N-3 去替代 N
              • 现在我们考虑的数字变为 N-1、N-2、N-3,为 奇-偶-奇 的组合,是互质的,所以我们最终的答案为 (N-1)*(N-2)*(N-3)

Python代码如下

N = int(input())

if(N%2==0): #是偶数
    if(N%3==0): #能被3整除
        print((N-1)*(N-2)*(N-3))
    else:  #不能被3整除,贪心
        print(N*(N-1)*(N-3))
else:
    print(N*(N-1)*(N-2))
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值