Java 求素數運算

2021-09-01 08:23:41 字數 915 閱讀 8153

網路上對求素數之解數不勝數,我在此總結歸納一下,同時對一些編碼,加以改進,效率有成倍熱提高。

第一種:

原理:6n(+-)1法

任何乙個自然數,總可以表示成為如下的形式之一: 6n,6n+1,6n+2,6n+3,6n+4,6n+5 (n=0,1,2,…)

顯然,當n≥1時,6n,6n+2,6n+3,6n+4都不是素數,只有形如6n+1和6n+5的自然數有可能是素數。所以,  除了2和3之外, 所有的素數都可以表示成6n±1的形式(n為自然數)。 根據上述分析,我們可以構造另一面篩子,  只對形如6n±1的自然數進行篩選,這樣就可以大大減少篩選的次數,從而進一步提高程式的執行效率和速度。

在程式上,我們可以用乙個二重迴圈實現這一點,外迴圈i按3的倍數遞增,內迴圈j為0-1的迴圈,則2(i+j)-1恰好就是形如6n±1的自然數。

原始碼:

private static void method3(int num)   

} system.out.println("耗時:"+(system.currenttimemillis()-start));

}

測試結果: num = 50 0000;執行100次取平均值:

耗時:223
第二種:

public long method4(int num)   

if (t * t > i)

} if (ok)

} return system.currenttimemillis()-btime;

}

測試結果: num= 50 0000;  執行100次取平均值:

耗時:376

求素數演算法 Java

例如求1000以內的素數 方法一 定義 素數 除了1和它本身以外不再被其他的除數整數。public void printprime int j 2 while j方法二 合數 1 合數定義 指自然數中除了能被1和本身整除外,還能被其他數 0除外 整數的數 2 大於1的自然數,不是質數就是合數。3 如...

java求素數的演算法

只能被1和它自己本身所整除的數成為素數或質數,以下為三種求n以內素數的演算法。一 從1至n全部遍歷,當這個數只能被1和n整除它就是素數。列印自然數n以內的素數 param n public void printprime int n 如果是質數,則列印 if isprime 二 篩數法求素數 篩數法...

為什麼求模運算要用素數(質數)

好的hash函式需要把原始資料均勻地分布到hash陣列裡 原始資料不大會是真正的隨機的,可能有某些規律,比如大部分是偶數,這時候如果hash陣列容量是偶數,容易使原始資料hash後不會均勻分布。比如 2 4 6 8 10 12這6個數,如果對 6 取餘 得到 2 4 0 2 4 0 只會得到3種ha...