今天从链接中看到了Python实现100以内的素数输出的算法,颇受感触。尤其是被其中的Python的列表生成器的使用方式帅到了!
看完Python的算法实现之后,先是回到老本行用C++实现了一遍,通过对比,你就可以发现Python真的是太简洁了!!!
1 /* 2 题目:100以内的素数输出算法验证 3 时间:2015年9月11日 4 作者:LeonWen 5 */ 6 7 #include "stdafx.h" 8 #include9 #include 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 sqrt2 N = 1003 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++确实要求很标准,也很规范。也算是额外的一点小体会吧~~~
明天周末啦~~~
原文链接: