这个问题被问了几百次,但我需要在特定部分解释我在网上找到的答案:
# prime numbers are only divisible by unity and themselves
# (1 is not considered a prime number by convention)
def isprime(n):
'''check if integer n is a prime'''
# make sure n is a positive integer
n = abs(int(n))
# 0 and 1 are not primes
if n < 2:
return False
# 2 is the only even prime number
if n == 2:
return True
# all other even numbers are not primes
if not n & 1:
return False
# range starts with 3 and only needs to go up the squareroot of n
# for all odd numbers
# ************THIS SECTION************
for x in range(3, int(n**0.5)+1, 2):
if n % x == 0:
return False
return True
#*************************************
有人可以解释一下这部分的工作原理吗?我知道range()中的值是start,stop,step。所以我们假设我们使用17作为n。起始值为3且(n ** 0.5)+ 1 = 5.12,这将是我们的停止值。由于步长值为2,x将为1.然后我们进入if n%x == 0:部分,并插入我们得到的值17%1 == 0:结果为True,所以我们返回False。我哪里出错?
答案 0 :(得分:0)
循环首先将x设置为3,然后测试n当除以3时是否有余数。
如果不是,那就不是素数。
如果是,则循环将x增加2(步长值),因此现在x为5。
将n的值除以5以查看是否有余数。
如果不是,那就是素数。
如果是,我们再次回到循环,x = 7然后x = 9等。
循环仅检查奇数到平方根加上n中的一个,因为因子总是在平方根的任一侧成对出现。如果在平方根之前没有因子,则它是素数。