Java程式檢查數字是否可以表示為兩個素數之和


對於給定的整數,編寫一個Java程式來檢查它是否可以表示為兩個素數之和。如果一個數只有兩個因子(1和它本身),並且不能被任何其他數整除,則稱該數為素數。一些素數的例子是2、3、5、7、11、13等等。2是唯一的偶素數。所有其他素數都是奇數。

讓我們用一個例子來理解這個問題:

示例場景

Input: num = 43;
Output: res = TRUE

可能的解法是:43 = 2 + 41。這裡,2和41是素數。

要檢查給定數字是否可以表示為兩個素數之和,請遍歷小於給定整數的數字,然後使用巢狀if塊找到可能的數字對。如果每一對中的兩個數字都是素數,則列印TRUE,否則列印FALSE

程式1

下面給出了一個演示如何檢查數字是否可以表示為兩個素數之和的Java程式:

public class SumOfPrimes {
   public static void main(String[] args) {
      int my_input, i;
      boolean my_temp = false;
      my_input = 34;
      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)) {
               my_temp = true;
			   break;
            }
         }
      }
      if (!my_temp) {
         System.out.println("FALSE"); 
      } else {
         System.out.println("TRUE");
      }
   }
   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;
   }
}

輸出

The number is defined as 43
TRUE

程式2

在這個Java程式中,我們使用了一種更最佳化的方式來查詢從1到給定整數的素數對,然後檢查該數是否可以表示為兩個素數之和。

import java.util.Arrays;

public class SumOfPrimes {
   public static void main(String[] args) {
      int my_input = 19;
      System.out.println("The number is defined as " +my_input);
      boolean[] primes = IsPrime(my_input);
      boolean my_temp = false;
      for (int i = 2; i <= my_input / 2; ++i) {
         if (primes[i]) {
            if (primes[my_input - i]) {
               my_temp = true;
               break;
            }
         }
      }
      if (!my_temp) {
         System.out.println("FALSE");
      } else {
         System.out.println("TRUE");
      }
   }

   // Sieve of Eratosthenes algorithm to find all primes less than n
   public static boolean[] IsPrime(int n) {
      boolean[] my_prime = new boolean[n + 1];
      Arrays.fill(my_prime, true);
      my_prime[0] = my_prime[1] = false;
      for (int i = 2; i * i <= n; i++) {
         if (my_prime[i]) {
            for (int j = i * i; j <= n; j += i) {
                my_prime[j] = false;
            }
         }
      }
      return my_prime;
   }
}

輸出

The number is defined as 19
TRUE

更新於: 2024年9月25日

905次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.