用多个数字测试可分性

时间:2011-08-29 01:06:49

标签: python python-3.x

在Python中,有没有办法测试一个数字是否可被多个数字整除,而没有为每个因子写出模数运算?

更具体地说,是否有更好的方法来编写此代码而不是键入i%n == 0九十次?

if i % 11 == 0 and i % 12 == 0 and i % 13 == 0 ... and i % 100 == 0:
    print(i)

谢谢!

5 个答案:

答案 0 :(得分:8)

使用all()和生成器表达式:

if all(i % n == 0 for n in range(11, 101)):
    print(i)

答案 1 :(得分:4)

if all(i % n == 0 for n in reversed(xrange(11, 101))):
    print(i)

仅提供了重复答案的略微修改版本:xrange返回一个对象,该对象根据需要生成数字(略快于range并且内存效率更高)。如果性能在这里很重要,这通常是像这样的数学代码片段,反向迭代器将首先检查更大的数字。这更有可能让您早日退出all()功能。

答案 2 :(得分:3)

你可以这样做:

if all(i % n == 0 for n in range(11, 101)):
    print(i)

答案 3 :(得分:3)

注意:这具有数学意义,但以前的答案在实践中更好。)

您可以计算所有除数的最小公倍数,并查看该数字是否可被整除。 (只是拿产品不起作用;考虑N = 16,除数为4和8。)

答案 4 :(得分:0)

以上答案是:

if all(i % n == 0 for n in range(11, 101)):
    print(i)

,应该提到澄清,只适用于内置的所有功能。我使用Spyder,它默认使用来自numpy.core.fromnumeric的all,上面的答案在这种情况下不起作用。然后使用以下内容:

import __builtin__

if __builtin__.all(i % n == 0 for n in range(11, 101)):
    print(i)