蓝桥杯Python练习题16-最大最小公倍数

资源限制
  内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

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

输入格式
  输入一个正整数N。

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

样例输入
9

样例输出
504

数据规模与约定
  1 <= N <= 106。

思路
  已知,在整数范围内:两个相邻的数必定互素;
  且两个相邻的奇数必定互素
  最小公倍数 = 几个数的乘积 / 他们的最大公约数
  故,在小于n的数中任选3个数求其最小公倍数的最大可能取值需要分情况讨论:
 (1)当n小于等于2时,最小公倍数就是它本身,即num = n
 (2)当n大于2且为奇数时,选取小于N最大的三个数的乘积就是最大最小公倍数,即num = n * (n-1) * (n-2)
 (3)当n大于2且为偶数时,n和(n-2)存在最大公约数2,如果继续使用num = n * (n-1) * (n-2)可能导致最小公倍数的值无法取到最大,故选取与(n-1)互素的(n-3),即num = n * (n-1) * (n-3)
 (4)还有一种特殊情况,就是当n满足(3)但是为3的倍数时(n-3)也是3的倍数,所以此时n和(n-3)存在最大公约数3,如果继续使用num = n * (n-1) * (n-3)可能导致最小公倍数的值无法取到最大,如果选取与(n-4)则可能导致结果偏小。故选择(n-2),即num = (n-1) * (n-2) * (n-3)
代码

# 19.最大最小公倍数
n = int(input())#输入最大数n
num = 0
if n<=2:#小于2的时候
    num = n
elif n%2 == 0:#n是2的倍数的时候
    if n%3 == 0:
        num = (n-1) * (n-2) * (n-3)
    else:
        num = n * (n-1) * (n-3)
else:#n不是2的倍数时
    num = n * (n-1) * (n-2)
print(num)

运行截图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/YSL_Lsy_/article/details/128534879
今日推荐