我在两边添加了注释来解释每一行的作用:
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