如何在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中检查一个数是否为梅森素数。
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP