优雅地在if语句中使用范围的方法?

8 投票
2 回答
6512 浏览
提问于 2025-04-16 19:00

我写这个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,所以这个检查其实是多余的。

撰写回答