实现100以内的素数输出(Python与C++对比)

时间:2023-03-08 21:39:01

今天从链接http://www.2cto.com/kf/201302/187699.html中看到了Python实现100以内的素数输出的算法,颇受感触。尤其是被其中的Python的列表生成器的使用方式帅到了!

看完Python的算法实现之后,先是回到老本行用C++实现了一遍,通过对比,你就可以发现Python真的是太简洁了!!!

 /*
题目:100以内的素数输出算法验证
时间:2015年9月11日
作者:LeonWen
*/ #include "stdafx.h"
#include<math.h>
#include<iostream>
using namespace std; bool IsPrime(int x)
{
if (x == )
{
return true;
}
int k = sqrt(x);
for (int i = ; i <= k + ; i++)
{
if (x % i == )
{
return false;//可以被整除,说明不是素数
}
}
return true;
} int _tmain(int argc, _TCHAR* argv[])
{
int N = ;
for (int i = ; i <= N; i++)
{
if (IsPrime(i))
{
cout << i << " ";
}
}
return ;
}

那么,在Python中又是怎么实现的呢?

在此之前,要是想要单纯的把C++代码用Python逐行翻译归来也是可行的,但这体现不出Python的奇淫巧计之处,故不在此处赘述。直接上述参考链接中的例子:

 from math import sqrt
N = 100
list = [p for p in range(2,N) if 0 not in [p % d for d in range(2,int(sqrt(p)) + 1)]]
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