蓝桥杯python 最大最小公倍数

算法训练ALGO-2 最大最小公倍数

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

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

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

N = int(input())
Min = 1
if N<=2:
    print(N)
elif N%2 != 0:
    print(N*(N-1)*(N-2))
else:
    if N%3 == 0:
        print((N-1)*(N-2)*(N-3))
    else:
        print(N*(N-1)*(N-3))

【解题思路】
1.要找到最大的最小公倍数,所以可以从N往下找
2.要找到最小公倍数,说明要从N’往下找到三个互质的数
3.任意大于1的两个相邻的自然数都是互质的;相邻的两个奇数是互质的
4.如果N<=2,可选择的范围只有1、2,最大的最小公倍数只能是2
5.接下来分类讨论N为奇数和偶数的情况:

  • 如果N为奇数,N和与N相邻的数和与N相邻的奇数,三个数互为质数,这时候得到最大的最小公倍数为N*(N-1)*(N-2)【如:5,4,3(N为5)】
  • 如果N为偶数,则需要讨论N是否为3的倍数:
  • 若N为3的倍数,且N为偶数,N与N-2不互质,N与N-3也不互质,此时最大的最小公倍数为**(N-1)(N-2)(N-3)**【如:11,10,9(N为12)】
  • 若N不为3的倍数,且N为偶数,则N与N-2不互质,N与N-3互质,此时最大的最小公倍数为N*(N-1)*(N-3)【如:8,7,5(N为8)】
### 关于蓝桥杯竞赛中Python相关的倍数问题 #### 解题思路 对于涉及倍数的问题,在编程竞赛尤其是像蓝桥杯这样的赛事里,通常会围绕着整除特性展开。这类题目可能要找出一定范围内的某个特定数字的倍数或者是处理多个数值之间的最小公倍数等问题。 当面对具体的倍数查找任务时,一种常见的策略是从给定范围内遍历每一个潜在候选者,并通过取余操作来验证其是否满足条件[^2]。如果目的是找到一系列连续自然数中的某固定正整数\(n\)的所有倍数,则可以通过循环结构实现这一逻辑;而对于更复杂的场景比如解两数间的最小公倍数(LCM),则往往先要确定这两个数的最大公约数(GCD)[^4],再基于两者关系\[LCM(a,b)=\frac{|a*b|}{GCD(a,b)}\]完成计算。 针对蓝桥杯的具体实例而言,假设存在一道关于寻找指定区间内能被若干个预设基数整除的元素集合的任务,那么解决方案应当考虑: - 明确输入数据的形式与约束; - 设计高效的算法以减少不必要的迭代次数; - 利用数学原理优化性能表现,例如提前终止搜索路径或是跳过不可能符合条件的情况。 #### 示例代码 下面给出一段用于检测并打印出0至100之间所有能够同时被3和5整除(即既是3又是5的倍数)的Python程序片段作为例子: ```python def find_multiples(start, end, divisors): result = [] for i in range(start, end + 1): if all(i % d == 0 for d in divisors): # Check divisibility by each divisor result.append(i) return result if __name__ == "__main__": multiples_of_3_and_5 = find_multiples(0, 100, [3, 5]) print(multiples_of_3_and_5) ``` 这段代码定义了一个名为`find_multiples()`的功能函数,它接受起始值、结束值以及一组除数列表作为参数,返回该区间内可被这些除数全部整除的结果集。最后部分展示了如何调用此功能并输出结果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值