คัดลอกรหัสรหัสดังต่อไปนี้:
-
* @ผู้เขียน jxqlovedn
* วิธีตะแกรงของจำนวนเฉพาะของ Eratosthenes โปรดดูที่: http://zh.wikipedia.org/zh-cn/วิธีตะแกรงของจำนวนเฉพาะของ Eratosthenes
-
AratosternyAlgorithm คลาสสาธารณะ {
โมฆะสาธารณะคงที่ getPrimes (int n) {
if(n < 2 || n > 1000000) // สาเหตุที่ค่าสูงสุดถูกจำกัดไว้ที่ 1 ล้านนั้นเป็นเพราะข้อจำกัดของหน่วยความจำ 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; // จำนวนเฉพาะที่ส่งออกในปัจจุบัน
int rowLength = 10; // จำนวนเฉพาะที่ส่งออกในแต่ละแถว
สำหรับ (int i = 0; i < array.length; i ++) {
ถ้า (อาร์เรย์ [i] == 0) {
ถ้า (นับ % rowLength == 0 && นับ != 0) {
System.out.println();
-
นับ++;
System.out.print(i + "/t");
-
-
-
โมฆะคงที่สาธารณะ main (String [] args) {
รับไพรม์ (99999);
-
-