判斷一個數是否為素數
x = int(raw_input('Enter a positive number:'))
for i in range(2,x):
if x % i ==0:
print 'x is not a prime.'
break
else:
print 'x is a prime.'
在這個小程序里,if-else的縮進和以往的有些不同,它和for在一個縮進級別。
具體說明如下:
1、如果if-else縮進一樣,程序輸出結果會出現好幾次
2.如果if-else縮進不一致則說明循環非正常結束才執行else,如果喜歡正常結束則不執行else。
另:可以把range的第二個參數改為‘int(math.sqrt(num) + 1)’可以提高程序執行效率。
加快搜索質數int(math.sqrt(num) + 1)
原因為非素數(即合數)最小的約數小于等于其開根。
根據素數的定義:除了1和自身之外,沒有別的約數。
對于一個數x,從集合range(2,x),即[2,3,....x-1]中,從2開始,如果找到了一個約數m,那么x就不是素數,找不到則x就是素數。
假設x(x > 2)是一個非素數(即合數),x最小的約數為m(m >= 2),則最大的約數為n(n = x / m),
m <= n
m <= (x/m)
m**2 <= x
m <= math.sqrt(x)
即非素數最小的約數小于等于其開根(對應python中的 math.sqrt(x))
而函數 range(2, x)返回的集合最后一個數為 x-1, 所以x參數要設置為開根+1,即math.sqrt(x)+1