次のようにコードをコピーします。
/**
* @著者jxqlovedn
※エラトステネス素数のふるい法については、http://zh.wikipedia.org/zh-cn/エラトステネス素数のふるい法を参照してください。
*/
パブリック クラス AratosternyAlgorithm {
public static void getPrimes(int n) {
if(n < 2 || n > 1000000) // 最大値が 100 万に制限されている理由は、JVM メモリの制限のためです。 もちろん、バイパスできる他の柔軟な解決策もあります (ビットマップ方式など)。
throw new IllegalArgumentException("入力パラメータ n が間違っています!");
int[] array = new int[n]; // すべての初期数値が素数であり、特定の数値が素数であると仮定します。たとえば、最初の数値が素数の場合、その値は 0 になります。配列[0]は0です
array[0] = 1; // 0 は素数ではありません。
array[1] = 1; // 1 は素数ではありません。
// 以下はスクリーニングの中心的なプロセスです
for(int i = 2; i < Math.sqrt(n);i++) { //最小の素数 2 から開始
if(配列[i] == 0) {
for(int j = i*i; j < n; j += i) {
array[j] = 1; // この位置を非素数としてマークします。
}
}
}
//n 以内のすべての素数を出力、1 行あたり 10 個の出力
System.out.println(n + "中の素数は次のとおりです: ");
int count = 0; //現在出力されている素数の数
int rowLength = 10; // 各行に出力される素数の数
for(int i = 0; i < array.length; i++) {
if(配列[i] == 0) {
if(カウント % rowLength == 0 && カウント != 0) {
System.out.println();
}
カウント++;
System.out.print(i + "/t");
}
}
}
public static void main(String[] args) {
getPrimes(99999);
}
}