Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
How To Check Whether a Number is a Mersenne Number or Not in Java?
What is a Mersenne Number?
A Mersenne number is a positive integer that is obtained using the expression M(n)= 2n-1, where 'n' is an integer. If you keep any value of n (e.g., 0, 1, 2, 3) in the above expression, the result will be a Mersenne number.
For example, consider n = 2 and calculate the expression 22 - 1. The result is 3, which is a Mersenne number. Not all Mersenne numbers are prime (e.g., 24 - 1 = 15) is a mersenne number, which is not prime.
Here are some other examples of Mersenne numbers:
- 23 - 1 = 7
- 24 - 1 = 15
- 25 - 1 = 31
- 26 - 1 = 63
To find the next Mersenne number, you just need to multiply 2 by the current Mersenne number and add 1.
Input & Output Scenarios
Below are some input and output scenarios that provide a clear understanding of the problem and calculation to check the Mersenne number:
Scenario 1
Suppose the input number is 3:
Input: 3 Output: Yes Calculation: M(n) = M(3) = 2n-1 = (2^3)-1 = 7
As you can see, the result of expression 2n-1 is a prime number (i.e., 7). Hence, 3 is a Mersenne number.
Scenario 2
Let's suppose the given number is 4:
Input: 304 Output: No Calculation: For any value of 'n' we never get the 2n-1 as 304.
The number 304 is not a Mersenne number.
Since we need to calculate the power of any number raised to the power of another number, we will use an inbuilt java.lang.Math.pow() method. Here is the syntax:
power = Math.pow(inputValue, 2)
Here, inputValue is the value of which power that will be calculated.
Example 1
The following is a basic example of checking whether the number 3 is a Mersenne number or not by comparing the value of the expression 2n-1 with the given number:
public class checkMersenne {
public static void main(String args[]) {
int num = 3;
System.out.println("The given number is: " + num);
//increase the value of num by one and assign it into another temp variable
int temp = num + 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++) {
//calculate the power value
p = (int)Math.pow(2, i);
if(p > temp) {
break;
}
else if(p == temp) {
System.out.println("Yes! " + num +" is a Mersenne number.");
res = 1;
}
}
if(res == 0) {
System.out.println("No! " + num + " is not a Mersenne number.");
}
}
}
The above program produces the following output:
The given number is: 3 Yes! 3 is a Mersenne number.
Example 2
In the example below, we define a method named isMersenneNumber(), which calculates the power of the number and compares the expression 2n - 1 with the given number 10 to check whether the number is Mersenne:
import java.util.Scanner;
public class checkMersenne {
//method to calculate the Mersenne number
public static boolean isMersenneNumber(int num){
int temp = num + 1, p = 0;
//loop will stop only when break statement is used...
for(int i = 0; ;i++) {
//calculate the power value
p = (int)Math.pow(2, i);
if(p > temp) {
break;
}
else if(p == temp) {
return true;
}
}
return false;
}
public static void main(String args[]) {
int num = 10;
System.out.println("The given number is: " + num);
//calling the isMersenneNumber() to check
System.out.println("Is the number " + num + " is a Mersenne? " + isMersenneNumber(num));
}
}
Below is the output of the above program:
The given number is: 10 Is the number 10 is a Mersenne? false