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数。