我在兩側添加註釋來解釋每一行的作用:
from math import * # imports everything from the math module
def main():
n = abs(input("Enter a number: ")) # gets input from the user
i = 2 # starts off at 2 because all input is divisble by 1
msg = 'is a prime number.' # the message is initially set
while i <= sqrt(n):
if n % i == 0: # if 'i' divides evenly into n
msg = 'is not a prime number.' # only set if it isn't a prime
i = i + 1 # increases 'i' by 1 so it can check every value up to the square-root of 'n' (to see if it divides evenly)
print n, msg
main()
程序要經過的每i
值(高達n
平方根),使得每一個可能的因素被檢查。
這有點粗糙,主要檢查的,和低效的大型數字不是素數: 如果輸入的是一個數字,如1234567890
,它會通過各種數量達迭代,以這個數字的平方根,這是35147
(向上取整)。 使用return
語句打破循環,因此您檢查的第一個數字2
由於它可以被2
整除,因此它被聲明爲不是素數。 通過使用return
,它將停止該功能,併爲您節省35,146次計算。這不是一個龐大的數字(至少對於電腦來說),但它仍然具有更高的內存效率,並且需要更少的時間。
def isPrime(n):
'''Checks if 'n' is prime.'''
from math import sqrt
if n == 0 or n == 1:
return False
else:
for check in range(2, int(sqrt(n))+1):
if n % check == 0: return False
return True
非常感謝您的全面解答。 – nutship