實現100以內的素數輸出(Python與C++對比)


今天從鏈接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++確實要求很標准,也很規范。也算是額外的一點小體會吧~~~

明天周末啦~~~

 

 原文鏈接:http://www.cnblogs.com/leonwen/p/4802042.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM