ในบทความนี้ เราจะเรียนรู้วิธีแสดงจำนวนเฉพาะจาก 1 ถึง N ในภาษา Java จำนวนเฉพาะคือจำนวนที่มีตัวหารได้แค่ 1 และตัวมันเองเท่านั้น
ข้อเท็จจริงเกี่ยวกับจำนวนเฉพาะ
- 2 เป็นจำนวนเฉพาะคู่เพียงตัวเดียว
- จำนวนเฉพาะอื่นๆ ล้วนเป็นเลขคี่
- ตัวอย่าง: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29...
ตัวอย่างการทำงาน
อินพุต:
Enter the value of n: 10
เอาต์พุต:
2 3 5 7
อัลกอริทึม
- เริ่มต้นโปรแกรม
- ประกาศตัวแปร:
n, i, counter, j - รับค่า N จากผู้ใช้ หรือกำหนดค่าไว้ล่วงหน้า
- วนลูป j จาก 2 ถึง N ตรวจสอบแต่ละจำนวน
- นับตัวหารของ j (counter) หาก counter == 2 แสดงว่าเป็นจำนวนเฉพาะ
- แสดงผลลัพธ์
- จบโปรแกรม
ตัวอย่างที่ 1: รับค่าจากผู้ใช้
import java.util.Scanner;
public class PrimeNumbers {
public static void main(String arg[]) {
int i, n, counter, j;
Scanner scanner = new Scanner(System.in);
System.out.println("Required packages have been imported");
System.out.println("A reader object has been defined");
System.out.print("Enter the n value: ");
n = scanner.nextInt();
System.out.print("Prime numbers between 1 to " + n + " are ");
for (j = 2; j <= n; j++) {
counter = 0;
for (i = 1; i <= j; i++) {
if (j % i == 0) {
counter++;
}
}
if (counter == 2) {
System.out.print(j + " ");
}
}
}
}
ตัวอย่างที่ 2: กำหนดค่าไว้ล่วงหน้า
public class PrimeNumbers {
public static void main(String arg[]) {
int i, n = 10, counter, j;
System.out.printf("Enter the n value is %d ", n);
System.out.printf("\nPrime numbers between 1 to %d are ", n);
for (j = 2; j <= n; j++) {
counter = 0;
for (i = 1; i <= j; i++) {
if (j % i == 0) {
counter++;
}
}
if (counter == 2) {
System.out.print(j + " ");
}
}
}
}
การเพิ่มประสิทธิภาพ (Optimization)
ลูปในตัวอย่างตรวจสอบถึง j ซึ่งช้า (O(n²)) สามารถปรับปรุงได้:
// ตรวจสอบแค่ถึง sqrt(j) เพียงพอ
for (i = 2; i * i <= j; i++) {
if (j % i == 0) {
counter++;
break;
}
}
// หรือใช้ Sieve of Eratosthenes สำหรับ N ใหญ่ (O(n log log n))