如何在Java中检查一个数是否为梅森素数?


如果一个素数满足表达式M(n)= 2n-1,其中‘n’为整数,则称其为梅森素数。

假设‘n’为整数。如果2n -1 等于素数,则该数称为梅森素数。

一些梅森素数的例子是:0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095 ...等等

在这篇文章中,我们将学习如何使用Java编程语言来检查一个数是否为梅森素数。

举几个例子

示例1

输入数字为15。

让我们使用梅森素数的逻辑来检查它。

如果我们取n = 4。

那么M(n)= M(4)= 2n-1 = (2^4)-1= 15。

正如我们在这里看到的,当n的值为4时,2n – 1等于原始素数。

因此,15是一个梅森素数。

示例2

输入数字为127。

让我们使用梅森素数的逻辑来检查它。

如果我们取n = 7。

那么M(n)= M(7)= 2n-1 = (2^7)-1= 127。

正如我们在这里看到的,当n的值为7时,2n-1等于原始素数。

因此,127是一个梅森素数。

示例3

输入数字为304。

让我们使用梅森素数的逻辑来检查它。

对于任何‘n’的值,我们都无法得到2n-1等于304。

因此,304不是一个梅森素数。

算法

步骤1 - 通过静态输入方法获取输入数字。

步骤2 - 使用循环检查是否存在任何‘n’的值使得2n -1的值与给定数字相同。

步骤3 - 如果找到这样的值,则打印该数字是梅森素数。

步骤4 - 如果没有找到这样的值,则打印该数字不是梅森素数。

语法

在Java中,我们有内置的java.lang.Math.pow()方法来获取任何数的幂。

以下是使用该方法获取2的幂的语法:

power = Math.pow (inputValue,2)

多种方法

我们提供了多种方法来解决这个问题。

  • 使用静态输入值

  • 使用用户输入值

  • 使用用户自定义方法

让我们逐一查看程序及其输出。

方法1:使用静态输入值

在这种方法中,我们声明一个变量并用一个数字初始化它。然后,使用算法我们可以检查该数字是否为梅森素数。

示例

import java.util.Scanner;
import java.math.BigInteger;
public class Main {
   public static void main(String args[]) {
 
      //declare a variable and initialize the value
      int inputNumber = 65535;
 
      //increase the value of inputNumber by one and assign it into another temp variable
      int temp = inputNumber + 1;
      int p = 0, res = 0;
   
      //loop to check whether by taking any value of n we are getting the original number or not
      for(int i=0; ;i++) {
      
         //for every iteration calculate the power value
         p = (int)Math.pow(2, i);

         //return false while the p value is greater than temp value
         if(p > temp) {
            break;
         }
         else if(p == temp) {
            System.out.println(inputNumber+" is a Mersenne number.");
            res = 1;
         }
      }
      if(res == 0) {
         System.out.println(inputNumber+" is not a Mersenne number.");
      }
   }
} 

输出

65535 is a Mersenne number.

方法2:使用用户输入值

在这种方法中,我们声明一个变量并从用户处获取一个数字作为值。然后,使用算法我们可以检查该数字是否为梅森素数。

示例

import java.util.Scanner;
import java.math.BigInteger;
public class Main {
   public static void main(String args[]) {
   
      //create object of Scanner class
      Scanner sc = new Scanner(System.in);
 
      //ask the user to enter a value
      System.out.print("Enter a number: ");
 
      //declare a variable and store the value by user input
      int inputNumber = sc.nextInt();
 
      //increase the value of inputNumber by one and assign it into another temp variable
      int temp = inputNumber + 1;
      int p = 0, res = 0;
   
      //loop to check whether by taking any value of n we are getting the original number or not
      for(int i=0; ;i++) {
      
         //for every iteration calculate the power value
         p = (int)Math.pow(2, i);
      
         //return false while the p value is greater than temp value
         if(p > temp) {
            break;
         }
         else if(p == temp) {
            System.out.println(inputNumber+" is a Mersenne number.");
            res = 1;
         }
      }
      if(res == 0) {
         System.out.println(inputNumber+" is not a Mersenne number.");
      }
   }
} 

输出

Enter a number: 3
3 is a Mersenne number.

方法3:使用用户自定义方法

在这种方法中,我们声明一个变量并用一个数字初始化它。然后,我们通过将此数字作为参数调用用户自定义方法,然后在方法内部使用算法来检查该数字是否为梅森素数。

示例

import java.util.Scanner;
import java.math.BigInteger;
public class Main {
   
   //main method
   public static void main(String args[]) {
 
      //declare a variable and initialize the value
      int inputNumber = 3;
      
      //call the user defined method
      if(checkMersenne(inputNumber))
         System.out.println(inputNumber+" is a Mersenne number.");
      else
         System.out.println(inputNumber+" is not a Mersenne number.");
   }
   
   //user defined method to check mersenne number
   public static boolean checkMersenne(int n) { 
      
      //increase the value of inputNumber by one and assign it into a temp variable
      int temp = n + 1;
      int p = 0, res = 0;
      
      //loop to check whether by taking any value of n we are getting the original number or not
      for(int i=0; ;i++) {
         
         //for every iteration calculate the power value
         p = (int)Math.pow(2, i);
         
         //return false while the p value is greater than temp value
         if(p > temp) {
            break;
         }
         else if(p == temp) {
            res = 1;
            return true;
         }
      }
      if(res == 0) {
         return false;
      }
      return false;
   }
} 

输出

3 is a Mersenne number.

在这篇文章中,我们探讨了如何使用不同的方法在Java中检查一个数是否为梅森素数。

更新于:2022年12月9日

1K+ 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.