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.