Python- 查找最小公倍数
1.题目:
一个自然数与3的和是5的倍数,与3的差是6的倍数,这个自然数最小是几?
2.分析:
(1) 第一层分析:
要找的这个数为
x
x
x,则根据题意需满足:
(
x
+
3
)
%
5
⋅
⋅
⋅
⋅
⋅
⋅
0
(x + 3) \%5 ······0
(x+3)%5⋅⋅⋅⋅⋅⋅0
(
x
−
3
)
%
6
⋅
⋅
⋅
⋅
⋅
⋅
0
(x - 3)\%6 ······0
(x−3)%6⋅⋅⋅⋅⋅⋅0
这种情况下其实就可以用累加方式逐个去试一试能否同时满足两个条件。这种方法在寻找较小的最小公倍数时可能较为快速有效,但是一旦最小公倍数过大的话寻找起来会比较浪费时间
(2) 第二层分析
我们可以将
x
+
3
x+3
x+3看做一个整体,这个整体用
y
y
y来表示,我们可以看到
y
y
y首先是5的倍数。而且
y
y
y此时比原来的
(
x
−
3
)
(x - 3)
(x−3)多6,因为:
y
−
(
x
−
3
)
=
(
x
+
3
)
−
(
x
−
3
)
=
6
y -(x - 3) = (x + 3) - (x - 3) = 6
y−(x−3)=(x+3)−(x−3)=6因此,我们可以先找出5的公倍数,然后逐一对6进行整除,当满足这两个条件后,说明找到了这个最小公倍数
y
y
y。此时再根据题目要求,得到
x
=
y
−
3
x = y - 3
x=y−3
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,需要在考虑安全性的情况下,对各种情况加以考虑。