下列Python代码用于判断一个正整数是否是质数(素数),相关说法中正确的是( )。
def is_prime(N):
if N <= 1:
return False # 处理所有非正整数
if N == 2 or N == 3 or N == 5:
return True
if N % 2 == 0 or N % 3 == 0 or N % 5 == 0:
return False
i = 7
step = 4
finish_number = int(N ** 0.5) + 1
while i <= finish_number:
if N % i == 0:
return False
i += step
step = 6 - step
return True
#列出1-N之间所有质数
N = int(input())
print([n for n in range(1,N+1) if is_prime(n)])
代码存在错误,比如5是质数,但因为 5 % 5 余数是0返回了False
finish_number 的值应该是 N // 2 ,当前写法将导致错误
当前while循环正确的前提是:所有大于3的质数都符合 6k±1 形式
while循环修改如下,其执行效果与执行时间相同。
for i in range(2, finish_number):
if N % i == 0:
return False
return True