如何在Java中檢查一個數是否為指標素數?


如果一個素數的各位數字乘積與該素數本身的和是下一個素數,則稱該數為指標素數。

為了更清楚地說明,我們取一個素數,將它的各位數字相乘,並將乘積與原素數相加。如果結果是原素數的下一個素數,那麼這個數就是一個指標素數。

一些指標素數的例子:23, 61, 1123, 1231 ...等等。

在本文中,我們將學習如何使用Java程式語言來檢查一個數是否為指標素數。

舉幾個例子

例1

輸入數字為23。

讓我們使用指標素數的邏輯來檢查它。

23的各位數字乘積 = 2 * 3 = 6。

將該值與原數相加 = 23 + 6 = 29。

原數的下一個素數是29。

我們注意到計算出的數字和下一個素數相同。

因此,23是一個指標素數。

例2

輸入數字為1123。

讓我們使用指標素數的邏輯來檢查它。

1123的各位數字乘積 = 1 * 1 * 2 * 3 = 6。

將該值與原數相加 = 1123 + 6 = 1129。

原數的下一個素數是1129。

我們注意到計算出的數字和下一個素數相同。

因此,1123是一個指標素數。

例3

輸入數字為147。

讓我們使用指標素數的邏輯來檢查它。

147的各位數字乘積 = 1 * 4 * 7 = 28。

將該值與原數相加 = 147 + 28 = 175。

我們注意到計算出的數字不是素數。

因此,147不是一個指標素數。

演算法

步驟1 - 獲取輸入數字,可以透過初始化或使用者輸入。

步驟2 - 檢查輸入數字是否為素數。

步驟3 - 確定原數的下一個素數。

步驟4 - 使用計算指標素數的演算法。

步驟5 - 如果計算出的值和下一個素數相同,則輸入數字為指標素數,否則不是。

多種方法

我們提供了不同的方法來解決這個問題。

  • 使用靜態輸入值和使用者自定義方法

  • 使用使用者輸入值和使用者自定義方法

讓我們逐一檢視程式及其輸出。

方法1:使用靜態輸入值和使用者自定義方法

在這種方法中,我們宣告一個具有靜態輸入的變數,然後使用演算法來檢查該數字是否為指標素數。

示例

public class Main {
   public static void main(String[] args) {
   
   // Declare a variable and store the value by static input method
   int inputNumber = 23;

   // call the function to check the pointer prime number
   if (checkPointerPrime(inputNumber))
      System.out.print(inputNumber + " is a pointer prime number.");
   else
      System.out.print(inputNumber + " is not a pointer prime number.");
   }
   
   //user-defined method to calculate product value of digits
   static int digitProduct(int num) {
      int prod = 1;
      
      //initiate loop to calculate product value
      while (num != 0) {
         prod = prod * (num % 10);
         
         //remove the last digit
         num = num / 10;
      }
      return prod;
   }

   // user-defined method to check the prime number
   public static boolean checkPrim(int num) {
      if (num <= 1)
         return false;
      
      //initiate the loop
      for (int i = 2; i < num; i++)
         
         //if condition to check whether the number is divisible by any number or not
         if (num % i == 0)
            
            //if true then return false
            return false;
         
         //otherwise return true
         return true;

   }

   // user-defined function to check the number is pointer prime number or not
   static int nextPrimeNum(int num) {

      //starting phase
      if (num <= 1)
         return 2;

      int nextPrime = num;
      boolean flag = false;

      // loop to check continuously for prime number
      while (!flag) {
         nextPrime++;

         if (checkPrim(nextPrime))
            flag = true;
      }
      return nextPrime;
   }

   // user-defined method to check Pointer-Prime numbers
   static boolean checkPointerPrime(int num) {
      
      //condition for pointer prime number
      if (checkPrim(num) &&
         (num + digitProduct(num) == nextPrimeNum(num)))
         return true;
      else
         return false;
   }
}

輸出

23 is a pointer prime number

方法2:使用使用者輸入值和使用者自定義方法

在這種方法中,我們要求使用者輸入一個數字,並將此數字作為引數傳遞給使用者自定義方法。然後,在方法內部,使用演算法來檢查該數字是否為指標素數。

示例

import java.util.Scanner;
public class Main {
   public static void main(String[] args) {
      
      //create object of Scanner class
      Scanner sc=new Scanner(System.in);
      
      //ask user to give the input
      System.out.print("Enter a number: ");
      
      //declare a variable and store the input value
      int inputNumber=sc.nextInt();
      
      // call the function to check the pointer prime number
      if (checkPointerPrime(inputNumber))
         System.out.print(inputNumber + " is a pointer prime number.");
      else
         System.out.print(inputNumber + " is not a pointer prime number.");
   }
   
   //user-defined method to calculate product value of digits
   static int digitProduct(int num) {
      int prod = 1;
      
      //initiate loop to calculate product value
      while (num != 0) {
         prod = prod * (num % 10);
         
         //remove the last digit
         num = num / 10;
      }
      return prod;
   }

   // user-defined method to check the prime number
   public static boolean checkPrim(int num) {
      if (num <= 1)
         return false;
 
      
      //initiate the loop
      for (int i = 2; i < num; i++)
         
         //if condition to check whether the number is divisible by any number or not
         if (num % i == 0)
            
            //if true then return false
            return false;
         
         //otherwise return true
         return true;

   }

   // user-defined function to check the number is pointer prime number or not
   static int nextPrimeNum(int num) {

      //starting phase
      if (num <= 1)
         return 2;

      int nextPrime = num;
      boolean flag = false;

      // loop to check continuously for prime number
      while (!flag) {
         nextPrime++;

         if (checkPrim(nextPrime))
            flag = true;
      }
      return nextPrime;
   }

   // user-defined method to check Pointer-Prime numbers
   static boolean checkPointerPrime(int num) {
      
      //condition for pointer prime number
      if (checkPrim(num) && 
      (num + digitProduct(num) == nextPrimeNum(num)))
         return true;
      else
         return false;
   }
}

輸出

Enter a number: 1123
1123 is a pointer prime number

在本文中,我們探討了如何使用不同的方法在Java中檢查一個數是否為指標素數。

更新於:2022年12月9日

695次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告