优雅地在if语句中使用范围的方法?
我写这个IF语句的方式非常简单粗糙。
for a in range (2,3000):
if ( a % 1) == 0 and ( a % 2) == 0 and ( a % 3) == 0 and ( a % 4) == 0 and ( a % 5) == 0 and ( a % 6) == 0 and ( a % 7) == 0 and ( a % 8) == 0 and ( a % 9) == 0 and ( a % 10) == 0 :
print a
我想应该有更好的写法,比如可以用一个范围函数配合IF语句来实现?
2 个回答
7
你需要的是在你设定的范围内,能够被最小公倍数(LCM)整除的数字。最小公倍数是指能被一组数字同时整除的最小的正整数。计算最小公倍数的方法有很多种,具体可以参考这个链接:http://en.wikipedia.org/wiki/Least_common_multiple
这里的最小公倍数 LCM(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 计算出来是 2520,具体的计算方式是 2 的 3 次方乘以 3 的 2 次方再乘以 5 和 7。你可以用类似下面的方式来进行计算:
lcm = 2520
i = 2/lcm
j = 3000/lcm
for k in range(i, j)
print (k + 1) * lcm
12
为了更直接的翻译,可以这样写:
for a in range(2, 3000):
if all(a % k == 0 for k in range(1,11)):
print a
不过当然,对于所有整数a来说,% 1的结果总是等于0,所以这个检查其实是多余的。