今天從鏈接http://www.2cto.com/kf/201302/187699.html中看到了Python實現100以內的素數輸出的算法,頗受感觸。尤其是被其中的Python的列表生成器的使用方式帥到了!
看完Python的算法實現之后,先是回到老本行用C++實現了一遍,通過對比,你就可以發現Python真的是太簡潔了!!!
1 /* 2 題目:100以內的素數輸出算法驗證 3 時間:2015年9月11日 4 作者:LeonWen 5 */ 6 7 #include "stdafx.h" 8 #include<math.h> 9 #include<iostream> 10 using namespace std; 11 12 bool IsPrime(int x) 13 { 14 if (x == 2) 15 { 16 return true; 17 } 18 int k = sqrt(x); 19 for (int i = 2; i <= k + 1; i++) 20 { 21 if (x % i == 0) 22 { 23 return false;//可以被整除,說明不是素數 24 } 25 } 26 return true; 27 } 28 29 int _tmain(int argc, _TCHAR* argv[]) 30 { 31 int N = 100; 32 for (int i = 2; i <= N; i++) 33 { 34 if (IsPrime(i)) 35 { 36 cout << i << " "; 37 } 38 } 39 return 0; 40 }
那么,在Python中又是怎么實現的呢?
在此之前,要是想要單純的把C++代碼用Python逐行翻譯歸來也是可行的,但這體現不出Python的奇淫巧計之處,故不在此處贅述。直接上述參考鏈接中的例子:
1 from math import sqrt 2 N = 100 3 list = [p for p in range(2,N) if 0 not in [p % d for d in range(2,int(sqrt(p)) + 1)]] 4 print list
反正我看到這段代碼之后的第一感覺是被驚艷到了!
也第一次體會到為什么別人說Python寫出來的代碼就像是在寫英語一樣,雖然談不上多么深度的內容,也很easy,但是確實頗令我對Python心生好感。
對此處的判別素數的算法做一個簡單的敘述或許就更加能體會到了。
算法概述:
判別一個數x是否為素數,我們只需要判別在2~sqrt(x)之間是否存在着某一個數k,使得x可以整除k。倘若可以整除,那么該數x就不是素數;反之,則為素數。
理解了算法,再回過頭去對比看C++和Python在實現過程中的代碼,Python代碼的第三行語句簡直就是一個翻譯啊!!!
好久沒用過C++了,發現C++確實要求很標准,也很規范。也算是額外的一點小體會吧~~~
明天周末啦~~~