我试图列出10000以下的所有Carmichael数,但是,我想我对print_carmichael
函数有问题。出于某种原因,当is_carmichael
为真时,它不会打印所有n
值。你知道吗
def is_carmichael(n):
b = 2
while b<n:
if (gcd(b, n) == 1):
if (pow(b, n - 1, n) != 1):
return 0
b = b + 1
return 1
def print_carmichael(max):
for n in range(2, max):
if is_carmichael(n):
print(n)
return 0
我看到的主要问题是,您没有像Wolfram MathWorld注释那样过滤掉素数:
输出
可能有一种更有效的方法来进行复合测试,但是你知道了。通过使用
is_charmichael()
本身的逻辑过滤出素数并抛出显式的is_prime()
函数,我们可以以速度为代价简化这段代码:相关问题 更多 >
编程相关推荐