从"求质数"的简单实现,看优化算法的意义。

有两个典型算法,思路都很清晰.

其一: 凡是只能被1和自己整除的就是质数

其二: 凡是最少有两个因数的就不是质数

就这么两个例子,逻辑上都没有错误,但是分别执行一下,记录并比较一下耗时,就会有惊人的发现。

算到九千以内的时候,算法一基本上还能工作,但是耗时为3秒;而这个时候算法二只需要30毫秒。

这就是差距了,哈哈~~~

话题外再说一句,算法二的一个关键点,就是实际工作中可能需要以适当的空间开销来换取工作效率的提高。

附上用js实现的两个算法程序。

其一: 凡是只能被1和自己整除的就是质数

var stopwatch = new Date();
var PrimeArys = [2];
var count = 1;
var isss = 0;
var MaxNum = 9000;
for(var i=3 ;i<=MaxNum;i+=2)
{
for(var j=3;j<(i/2);j+=2)
{
if(i%j==0){
isss = 1;
break;
}else{
isss = 0;
}
}
if(isss == 0){
{
PrimeArys[ count++ ] = i;
}
}
}
var t=new Date()-stopwatch;
alert("本次运行了 "+t+" 毫秒。");
document.write( PrimeArys.join(" ") , "

从2到"+MaxNum+"共有素数 "+count+" 个。");

其二: 凡是最少有两个因数的就不是质数

var stopwatch = new Date();
var MaxNum = 9000;
var i, j;
var count = 1;
var PrimeTemp = [];
var PrimeArys = [2];
var oNum = Math.ceil( Math.sqrt( MaxNum ) );
for(i=3; i<oNum; i+=2)
if( PrimeTemp[i]==null )
for(j=i; i*j<=MaxNum; j+=1)
PrimeTemp[ i*j ] = 0;
for(i=3; i<=MaxNum; i+=2)
if( PrimeTemp[i]==null )
PrimeArys[ count++ ] = i;
var t=new Date()-stopwatch;
alert("本次运行了 "+t+" 毫秒。");
document.write( PrimeArys.join(" ") , "

从2到"+MaxNum+"共有素数 "+count+" 个。");
posted @ 2013-02-05 15:04  辛巴无忧  阅读(356)  评论(0编辑  收藏  举报