标签:
今天从链接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
标签:
原文地址:http://www.cnblogs.com/leonwen/p/4802042.html