Java โปรแกรมสำหรับพิมพ์ Prime Numbers จาก 1 ไป 100
⚡ สรุปอย่างชาญฉลาด
โปรแกรมพิมพ์เลขเฉพาะตั้งแต่ 1 ถึง 100 นิ้ว Java โปรแกรมจะสแกนทุกค่าในช่วงที่กำหนดและรายงานเฉพาะค่าที่มีตัวหารสองตัวพอดี บทความนี้อธิบายถึงคำจำกัดความ วิธีการตรวจสอบ โปรแกรมฉบับสมบูรณ์ ตะแกรงของเอราโตสเธเนส และการเปรียบเทียบประสิทธิภาพพร้อมผลลัพธ์ที่ได้รับการตรวจสอบแล้ว

หมายเลขเฉพาะคืออะไร?
A จำนวนเฉพาะ จำนวนเฉพาะ คือจำนวนที่หารลงตัวได้เฉพาะด้วยหนึ่งหรือตัวมันเองเท่านั้น เป็นจำนวนธรรมชาติที่มากกว่าหนึ่งซึ่งไม่ใช่ผลคูณของจำนวนธรรมชาติที่เล็กกว่าสองจำนวน ตัวอย่างเช่น 11 หารลงตัวได้เฉพาะด้วยหนึ่งหรือตัวมันเองเท่านั้น จำนวนเฉพาะอื่นๆ ได้แก่ 2, 3, 5, 7, 11, 13, 17 และอื่นๆ
หมายเหตุ 0 และ 1 ไม่ใช่จำนวนเฉพาะ 2 เป็นจำนวนเฉพาะคู่เพียงตัวเดียว
ระหว่าง 1 ถึง 100 มีจำนวนเฉพาะอยู่ 25 จำนวนพอดี ตารางด้านล่างจัดกลุ่มจำนวนเฉพาะเหล่านี้ตามทศวรรษ ซึ่งทำให้เห็นรูปแบบการลดจำนวนลงเมื่อค่าเพิ่มขึ้น
| พิสัย | สำคัญ Numbers | นับ |
|---|---|---|
| 1 - 20 | 2, 3, 5, 7, 11, 13, 17, 19 | 8 |
| 21 - 40 | 23, 29, 31, 37 | 4 |
| 41 - 60 | 41, 43, 47, 53, 59 | 5 |
| 61 - 80 | 61, 67, 71, 73, 79 | 5 |
| 81 - 100 | 83, 89, 97 | 3 |
วิธีการพิมพ์ Prime Numbers ระหว่าง 1 ถึง 100 โปรแกรมใน Java
ด้านล่างนี้คือ Java โปรแกรมพิมพ์เลขเฉพาะตั้งแต่ 1 ถึง 100:
ตรรกะของโปรแกรม:
- วิธีการหลักของ โปรแกรมเลขเฉพาะใน Java ประกอบด้วยลูปสำหรับตรวจสอบจำนวนเฉพาะระหว่าง 1 ถึง 100 ทีละตัว
- วิธีการหลักเรียกวิธีการ
CheckPrimeเพื่อตรวจสอบว่าจำนวนใดเป็นจำนวนเฉพาะหรือไม่ Java หรือไม่ - เราต้องนำตัวเลขที่ป้อนเข้ามา เช่น 17 มาหารด้วยค่าตั้งแต่ 2 ถึง 17 แล้วตรวจสอบเศษเหลือ ถ้าเศษเหลือเป็น 0 แสดงว่าตัวเลขนั้นไม่ใช่จำนวนเฉพาะ
- ไม่มีจำนวนใดหารลงตัวด้วยตัวมันเองเกินครึ่งหนึ่ง ดังนั้น เราจึงต้องวนลูปโดยใช้ค่า numberToCheck/2 เท่านั้น ถ้าค่าที่ป้อนเข้ามาคือ 17 ครึ่งหนึ่งคือ 8.5 และลูปจะวนซ้ำค่าตั้งแต่ 2 ถึง 8
- If
numberToCheckถ้าจำนวนนั้นหารลงตัวด้วยจำนวนอื่น เราจะส่งค่า false กลับมา และลูปจะหยุดทำงาน - If
numberToCheckเป็นจำนวนเฉพาะ เรากลับเป็นจริง - ในวิธีหลักสำหรับจำนวนเฉพาะ 1 ถึง 100 ใน Javaตรวจสอบว่า isPrime เป็นจำนวนเฉพาะหรือไม่
TRUEและเพิ่มค่าดังกล่าวให้กับจำนวนเฉพาะNumbersพบสตริง - สุดท้ายพิมพ์จำนวนเฉพาะจาก 1 ถึง 100 ใน Java.
การแยกการตรวจสอบออกเป็นเมธอดเฉพาะทำให้โปรแกรมสามารถนำกลับมาใช้ใหม่ได้ เมธอด CheckPrime เดียวกันนี้สามารถเรียกใช้ได้กับค่าขีดจำกัดบนใดๆ ก็ได้โดยการเปลี่ยนค่าตัวแปร maxCheck เท่านั้น
public class PrimeNumbers {
public static void main(String[] args) {
int i;
int num = 0;
int maxCheck = 100; // maxCheck limit till which you want to find prime numbers
boolean isPrime = true;
//Empty String
String primeNumbersFound = "";
//Start loop 2 to maxCheck
for (i = 2; i <= maxCheck; i++) {
isPrime = CheckPrime(i);
if (isPrime) {
primeNumbersFound = primeNumbersFound + i + " ";
}
}
System.out.println("Prime numbers from 1 to " + maxCheck + " are:");
// Print prime numbers from 1 to maxCheck
System.out.println(primeNumbersFound);
}
public static boolean CheckPrime(int numberToCheck) {
int remainder;
for (int i = 2; i <= numberToCheck / 2; i++) {
remainder = numberToCheck % i;
//if remainder is 0 then the number is not prime and we break the loop. Else continue the loop
if (remainder == 0) {
return false;
}
}
return true;
}
}
ผลลัพธ์ที่คาดหวัง:
ผลลัพธ์ของจำนวนเฉพาะระหว่าง 1 ถึง 100 ใน Java โครงการ จะ:
Prime numbers from 1 to 100 are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
ค่า 2 ผ่านเนื่องจากเงื่อนไขของลูปภายใน i <= 2 / 2 ประเมินถึง 2 <= 1ซึ่งเป็นเท็จทันที ดังนั้นเมธอดจึงคืนค่าเป็นจริงโดยไม่ต้องหารแม้แต่ครั้งเดียว
เวอร์ชันที่ปรับให้เหมาะสมโดยใช้ขอบเขตรากที่สอง
การหารด้วยจำนวนไม่เกินครึ่งหนึ่งนั้นถูกต้อง แต่เป็นการทำงานที่ไม่จำเป็น ตัวหารมักปรากฏเป็นคู่ๆ รอบรากที่สอง ดังนั้นตัวประกอบใดๆ ที่มากกว่า √n จะมีคู่ของมันที่น้อยกว่า ซึ่งได้ถูกทดสอบไปแล้ว
public class PrimeNumbersOptimized { public static void main(String[] args) { int maxCheck = 100; int count = 0; StringBuilder result = new StringBuilder(); for (int i = 2; i <= maxCheck; i++) { if (isPrime(i)) { result.append(i).append(" "); count++; } } System.out.println("Prime numbers from 1 to " + maxCheck + " are:"); System.out.println(result.toString().trim()); System.out.println("Total primes found: " + count); } public static boolean isPrime(int n) { if (n <= 1) return false; if (n == 2) return true; if (n % 2 == 0) return false; // test only odd divisors up to the square root for (int i = 3; i * i <= n; i += 2) { if (n % i == 0) return false; } return true; } }
Output:
Prime numbers from 1 to 100 are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 Total primes found: 25
💡 เคล็ดลับ: StringBuilder จะแทนที่การต่อสตริงซ้ำๆ ภายในลูป แต่ละ += การเรียกใช้เมธอด on a String จะสร้างอ็อบเจ็กต์ใหม่ ซึ่งจะสามารถวัดค่าได้เมื่อค่าสูงสุดถึงหลายพัน
พิมพ์ไพรม์ Numbers การใช้ตะแกรงของเอราโตสเธเนส
เมื่อต้องการจำนวนเฉพาะทุกตัวในช่วงที่กำหนด การหารแบบลองผิดลองถูกไม่ใช่เครื่องมือที่เหมาะสม ตะแกรงของเอราโตสเธเนสสร้างอาร์เรย์แบบบูลีน ทำเครื่องหมายตัวคูณของจำนวนเฉพาะแต่ละตัวว่าเป็นจำนวนประกอบ และอ่านค่าส่วนที่เหลือที่ไม่ได้ทำเครื่องหมาย
วิธีการนี้ดำเนินการในสามขั้นตอน:
- สร้างอาร์เรย์บูลีนขนาด n+1 และสมมติว่าดัชนีทุกตัวตั้งแต่ 2 ขึ้นไปเป็นจำนวนเฉพาะ
- เริ่มตั้งแต่เลข 2 เป็นต้นไป ให้ทำเครื่องหมายทุกจำนวนที่เป็นผลคูณของจำนวนเฉพาะปัจจุบันว่าเป็นจำนวนประกอบ
- เลื่อนไปยังดัชนีที่ยังไม่ได้ทำเครื่องหมายถัดไป และทำซ้ำจนกว่าจะผ่านรากที่สองของ n
import java.util.Arrays; public class SieveOfEratosthenes { public static void main(String[] args) { int n = 100; boolean[] composite = new boolean[n + 1]; for (int p = 2; p * p <= n; p++) { if (!composite[p]) { // start at p*p because smaller multiples are already marked for (int multiple = p * p; multiple <= n; multiple += p) { composite[multiple] = true; } } } StringBuilder result = new StringBuilder(); for (int i = 2; i <= n; i++) { if (!composite[i]) { result.append(i).append(" "); } } System.out.println("Prime numbers from 1 to " + n + " are:"); System.out.println(result.toString().trim()); } }
Output:
Prime numbers from 1 to 100 are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
การเปรียบเทียบวิธีการทั้งสาม
ทั้งสามโปรแกรมแสดงค่าเดียวกัน 25 ค่า ดังนั้นการเลือกใช้จึงขึ้นอยู่กับขนาดของช่วงข้อมูลเป็นหลัก
| เข้าใกล้ | ความซับซ้อนของเวลา | หน่วยความจำเสริม | ช่วงที่ดีที่สุด |
|---|---|---|---|
| การหารทดลองเป็น n/2 | โอ(n²) | O (1) | มากถึงหลายพัน |
| การหารทดลองเป็น √n | โอ(n√n) | O (1) | มากถึงหลายแสน |
| ตะแกรงเอราทอสเธเนส | O(n log log n) | O (n) | คุณค่านับล้าน |
ตรวจสอบโปรแกรมของเราเพื่อค้นหา จำนวนเฉพาะจากจำนวนป้อนใดๆ เมื่อต้องการทดสอบค่าเดียวแทนที่จะเป็นช่วงค่า สำหรับแบบฝึกหัดเพิ่มเติมเกี่ยวกับการวนซ้ำ โปรดดูที่ ลำดับฟิโบนาชี่ใน Javaที่ Java โปรแกรมพาลินโดรมและ Bubble เรียงลำดับอัลกอริทึมใน Javaอาร์เรย์บูลีนที่ใช้โดยตัวกรองจะได้รับการอธิบายเพิ่มเติมในหัวข้อถัดไป Java อาร์เรย์.
