寫程序求素數的比較快的方法
阿新 • • 發佈:2017-05-28
記錄 算法 明顯 所有 new 包括 count static als
今天在百度知道看見有人求算100000之內素數的方法,看了一下回帖,發現都是做C1時用爛的方法,即兩個for循環,復雜度為power(n,1.5);
但是突然想到一種優化:
public static void main(String[] args){
int[] r = new int[10000];
int num=0;
int count = 0;
for(int i=2;i<100000;i++){
boolean is = true;
if(num==0){
r[num++] = i;
continue ;
}
for(int j=0;j<num&&r[j]*r[j]<=i;j++){
if(i%r[j]==0){
is = false;
break;
}
}
if(is){
System.out.print(i+" ");
count++;
r[num++] = i;
}
if(count==5){
System.out.println();
count=0;
}
}
}
在 計算時記錄素數,並在判斷是否是素數時直接將要判斷的數除以記錄過的素數,而不是除以所有小於該數的開方,其復雜度是肯定不大於power(n,1.5) 的,而且n越大,這種算法的優勢越明顯。在計算100000內素數時,時間是前者的10%(不包括輸出結果,若要輸出結果,平均時間大概是前者的80%)
總的來說這還只是一種比較低級的優化,應該當時早有同學想到了。
寫程序求素數的比較快的方法