Java 如何检查一个数是否为梅森数

Java 如何检查一个数是否为梅森数

如果一个素数满足以下表达式:M(n) = 2n-1,其中’n’是一个整数,那么它被称为梅森数。

例如: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的乘方的语法:double-

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中检查一个数字是否为Mersenne数。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程