انسخ رمز الكود كما يلي:
/**
* @ المؤلف jxqlovedn
* طريقة الغربلة للأعداد الأولية لإراتوستينس، يرجى الرجوع إلى: http://zh.wikipedia.org/zh-cn/ طريقة الغربلة للأعداد الأولية لإراتوستينس
*/
الطبقة العامة خوارزمية أراتوستيرني {
public static void getPrimes(int n) {
if(n < 2 || n > 1000000) // السبب وراء تحديد الحد الأقصى للقيمة بمليون هو قيود ذاكرة JVM بالطبع، هناك حلول مرنة أخرى يمكن تجاوزها (مثل طريقة الصورة النقطية).
طرح 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
إذا (صفيف [i] == 0) {
ل(int j = i*i; j < n; j += i) {
array[j] = 1; // حدد هذا الموضع كرقم غير أولي
}
}
}
// اطبع جميع الأعداد الأولية ضمن n، وإخراج 10 لكل صف
System.out.println(n + "الأعداد الأولية الموجودة هي كما يلي:");
int count = 0; // عدد الأعداد الأولية التي يتم إخراجها حاليًا
introwLength = 10; // عدد الأعداد الأولية الناتجة في كل صف
for(int i = 0; i < array.length; i++) {
إذا (صفيف [i] == 0) {
إذا (العدد % طول الصف == 0 && العد != 0) {
System.out.println();
}
العد++;
System.out.print(i + "/t");
}
}
}
public static void main(String[] args) {
getPrimes(99999);
}
}