【发布时间】:2019-01-20 10:28:44
【问题描述】:
这里的主要问题是:有没有更好的方法在 Python 中使用“all”? 我读过它经历了每一种情况,然后回来看看是否有任何情况。我想一次检查一个条件,然后在一个不工作时立即退出。我相信这被称为“短路......”。我不能使用一系列“和”,因为它们会随着输入而改变,并且可能有数百万个条件。
我正在寻找Carmichael numbers。卡迈克尔数的一个定义是对于所有 1
我使用了代码:
def Carm(num):
if all(gcd(k,num) == 1 for k in range(3,int(round(num**0.5)),2)) and gcd(2,num) == 1:
print(num,'is a Prime Number')
elif all(pow(b,num,num)==b for b in range(1,num)) and gcd(num,2)==1:
print(num,'is a Carmichael Number')
else:
print(num,'is not a Carmichael Number')
【问题讨论】:
-
首先,我会颠倒您的条件顺序。
and短路:如果第一个条件是False,则不检查第二个。如果您的一个条件比另一个慢得多,它应该排在最后。 -
另外,你能把
gcd()的代码贴出来吗? -
非常感谢您的回复!我应该交换哪些条件?你能建议最好的顺序吗? gcd 是从“分数”导入的:
from fractions import gcd -
你为什么要通过完整的 GCD 计算来检查可分性?
标签: python python-3.x primes