ในบทความนี้ เราจะทำความเข้าใจวิธี ตรวจสอบว่าเลขใดเลขหนึ่งสามารถเขียนเป็นผลรวมของจำนวนเฉพาะ 2 ตัวได้หรือไม่
หลักการ: วนลูป i จาก 2 ถึง n/2 ตรวจสอบว่า i และ n-i เป็นจำนวนเฉพาะทั้งคู่หรือไม่
ตัวอย่าง Input และ Output
Input:
Input number : 43
Output:
The number can be expressed as sum of two prime numbers. The possible solutions are : 43 = 2 + 41
อัลกอริธึม
ขั้นตอนที่ 1 - เริ่มต้น ขั้นตอนที่ 2 - ประกาศตัวแปร my_input, i, boolean my_temp ขั้นตอนที่ 3 - อ่านค่าจากผู้ใช้ หรือกำหนดค่าเริ่มต้น ขั้นตอนที่ 4 - สร้างฟังก์ชัน IsPrime ตรวจสอบจำนวนเฉพาะ ขั้นตอนที่ 5 - วนลูป i = 2 ถึง my_input/2 ถ้า IsPrime(i) และ IsPrime(my_input-i) จริง → พบคำตอบ ขั้นตอนที่ 6 - แสดงคำตอบทั้งหมดที่พบ ขั้นตอนที่ 7 - หยุด
ตัวอย่างที่ 1: รับค่าจากผู้ใช้
import java.util.Scanner;
public class SumOfPrimes {
public static void main(String[] args) {
int my_input, i;
boolean my_temp = false;
my_input = 43;
System.out.println("Required packages have been imported");
Scanner my_scanner = new Scanner(System.in);
System.out.println("A reader object has been defined");
System.out.print("Enter the number : ");
my_input = my_scanner.nextInt();
for (i = 2; i <= my_input / 2; ++i) {
if (IsPrime(i)) {
if (IsPrime(my_input - i)) {
System.out.println("The number can be expressed as sum of two prime numbers.");
System.out.println("The possible solutions are :");
System.out.printf("%d = %d + %d\n", my_input, i, my_input - i);
my_temp = true;
}
}
}
if (!my_temp)
System.out.println(my_input + " cannot be expressed as the sum of two prime numbers.");
}
static boolean IsPrime(int num) {
boolean my_prime = true;
for (int i = 2; i <= num / 2; ++i) {
if (num % i == 0) {
my_prime = false;
break;
}
}
return my_prime;
}
}
Output
Required packages have been imported A reader object has been defined Enter the number : 43 The number can be expressed as sum of two prime numbers. All the possible solutions are : 43 = 2 + 41
ตัวอย่างที่ 2: กำหนดค่าไว้ล่วงหน้า
public class SumOfPrimes {
public static void main(String[] args) {
int my_input, i;
boolean my_temp = false;
my_input = 43;
System.out.println("The number is defined as " + my_input);
for (i = 2; i <= my_input / 2; ++i) {
if (IsPrime(i)) {
if (IsPrime(my_input - i)) {
System.out.println("The number can be expressed as sum of two prime numbers.");
System.out.println("The possible solutions are :");
System.out.printf("%d = %d + %d\n", my_input, i, my_input - i);
my_temp = true;
}
}
}
if (!my_temp)
System.out.println(my_input + " cannot be expressed as the sum of two prime numbers.");
}
static boolean IsPrime(int num) {
boolean my_prime = true;
for (int i = 2; i <= num / 2; ++i) {
if (num % i == 0) {
my_prime = false;
break;
}
}
return my_prime;
}
}
Output
The number is defined as 43 The number can be expressed as sum of two prime numbers. All the possible solutions are : 43 = 2 + 41