如何在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:使用静态输入值和用户自定义方法

在这种方法中,我们声明一个具有静态输入的变量,然后使用算法来检查该数字是否为指针素数。

示例

Open Compiler
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次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告