一旦知道数字不是素数,就需要停止迭代。
break一旦找到质数就添加一个,退出while循环。
只需对代码进行最少的更改即可使其工作:
a=2num=13while num > a : if num%a==0 & a!=num: print('not prime') break i += 1else: # loop not exited via break print('prime')您的算法等效于:
for a in range(a, num): if a % num == 0: print('not prime') breakelse: # loop not exited via break print('prime')如果将其放入函数中,则可以免除
breakfor-else:
def is_prime(n): for i in range(3, n): if n % i == 0: return False return True
即使您要像这样强力求素,也只需要迭代到的平方根即可
n。另外,您可以跳过测试两个之后的偶数。
这些建议如下:
import mathdef is_prime(n): if n % 2 == 0 and n > 2: return False for i in range(3, int(math.sqrt(n)) + 1, 2): if n % i == 0: return False return True
请注意,此代码不能正确处理
0,
1和负数。
我们通过
all与生成器表达式一起使用来替换for循环,从而使此过程更简单。
import mathdef is_prime(n): if n % 2 == 0 and n > 2: return False return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))


![Python素数检查器[重复] Python素数检查器[重复]](http://www.mshxw.com/aiimages/31/612036.png)
