一旦你知道一个数字不是素数,你就需要停止迭代。break
找到素数后添加一个以退出 while 循环。
只需对代码进行少量更改即可使其正常工作:
a=2
num=13
while num > a :
if num%a==0 & a!=num:
print('not prime')
break
i += 1
else: # loop not exited via break
print('prime')
您的算法等效于:
for a in range(a, num):
if a % num == 0:
print('not prime')
break
else: # loop not exited via break
print('prime')
如果你把它扔进一个函数中,你可以省去break
for-else:
def is_prime(n):
for i in range(3, n):
if n % i == 0:
return False
return True
即使你要像这样对素数进行暴力破解,你也只需要迭代到n
. 此外,您可以跳过测试两个之后的偶数。
有了这些建议:
import math
def 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 math
def 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))