各行の機能を説明するために、側面にコメントを追加しました。
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