下面是我用JavaScript寫的素數函數,供參考,大同小異
PrimeA=function(n,nth){/* 小於n的素數表參數nth 指定返回第n個素數
*/
//var?t0=Time.now5();
/*
方法1:利用isPrime 廢棄!
var?t=[];
for(var?i=2;i<n+1;i++){
if(isPrime(i)){
t.push(i)
}
}
consolelog('方法1:耗時:'+(+Time.now5()-(+t0)));
return?t
*/
//方法2:利用篩法
var?p=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59];//自己往後補充,越多越好,可以加快檢測小素數的效率
if(nth?&&?n<=669){
return?p[n-1]
}
if(!nth?&&?n<2){
return?[]
}
if(n<=5000?&&?!nth){
for(var?i=0;i<100;i++){
var?j=p.indexOf(n-i);
if(j>-1){return?p.slice(0,j+1)};
}
return?p
}
var?m=nth?Math.ceil(n*Math.log(n)+1000):n; //pnnln(n)
// for(var?i=5001;i<=m;i+=2){
var?i=5001;
while(i){
var?t=Math.floor(Math.sqrt(i)),?pl=p.length;
for(var?j=0;j<pl;j++){//p.length
if(i%p[j]?==?0){
break
}else?if(p[j+1]>t){
p.push(i);
if(nth?&&?pl==n-1){
return?i
}
break;
}
}
if(!nth?&&?i>=n-1){
return?p
}
i+=2;
}
return?p
//方法3:Wilson測試
}