Python- 查找最小公倍数

Python- 查找最小公倍数

1.题目:

一个自然数与3的和是5的倍数,与3的差是6的倍数,这个自然数最小是几?

2.分析:

(1) 第一层分析:

要找的这个数为 x x x,则根据题意需满足:
( x + 3 ) % 5 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ 0 (x + 3) \%5 ······0 (x+3)%50
( x − 3 ) % 6 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ 0 (x - 3)\%6 ······0 (x3)%60
这种情况下其实就可以用累加方式逐个去试一试能否同时满足两个条件。这种方法在寻找较小的最小公倍数时可能较为快速有效,但是一旦最小公倍数过大的话寻找起来会比较浪费时间

(2) 第二层分析

我们可以将 x + 3 x+3 x+3看做一个整体,这个整体用 y y y来表示,我们可以看到 y y y首先是5的倍数。而且 y y y此时比原来的 ( x − 3 ) (x - 3) (x3)多6,因为:
y − ( x − 3 ) = ( x + 3 ) − ( x − 3 ) = 6 y -(x - 3) = (x + 3) - (x - 3) = 6 y(x3)=(x+3)(x3)=6因此,我们可以先找出5的公倍数,然后逐一对6进行整除,当满足这两个条件后,说明找到了这个最小公倍数 y y y。此时再根据题目要求,得到 x = y − 3 x = y - 3 x=y3

3.代码示例

x = 5
while x % 5 == 0:
  if (x - 6)% 6 == 0:
    break
  else:
    x += 5
print(x - 3)

4.引申:寻找最小公倍数

前面的代码可以比较容易得找出满足题目要求的数字,当然这是针对较小整数之间的代码参考。我们发现经过适当修改,上述代码也可以用于寻找较小整数之间的最小公倍数。

# -*- coding: cp936 -*-
#先从键盘读入两个数字
x = int(raw_input("Please input first number: \n"))
y = int(raw_input("Please input second number: \n"))

#用m和n暂时存储需要找出的最小公倍数的因数
m = x
n = y

#遍历寻找
while x % m == 0:
  if x % y == 0:
    break
  else:
    x += m
 #打印出最终结果
 print(x)
  • 请注意在不同python版本下的raw_input()input用法
  • python2中,raw_input()将输入所有内容均转换为字符串,input()的效果则是输入什么就是什么
  • python3中,两个函数都将输入内容转换为字符串
  • 值得注意的是,这段代码仅仅是对较小整数寻找最小公倍数写的解决办法,并没有考虑碰到零,负数等情况。实际上,这样很容易出现bug,需要在考虑安全性的情况下,对各种情况加以考虑。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值