实现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

I can
原文地址:https://www.cnblogs.com/leonwen/p/4802042.html