Sth about Python 07 -- if-else縮進的一個說明

判斷一個數是否為素數

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,771評論 0 33
  • Java經典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子...
    趙宇_阿特奇閱讀 1,910評論 0 2
  • 【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔...
    葉總韓閱讀 5,165評論 0 41
  • 【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔...
    磨礪營閱讀 712評論 0 6
  • 灑淚揮別一路護航陪你踏入大學的父母,獨自面對這里的琳瑯滿目,你內心涌起的是巨大自由的欣喜,還是無限的失望和恐慌?...
    群玉秉輝閱讀 728評論 4 1