Mersenne Prime


Mersenne Prime is a prime number that is one less than a power of two. In other words, any prime is Mersenne Prime if it is of the form 2k-1 where k is an integer greater than or equal to 2. First few Mersenne Primes are 3, 7, 31 and 127.

The task is print all Mersenne Primes smaller than an input positive integer n.


Input: 10
Output: 3 7
3 and 7 are prime numbers smaller than or
equal to 10 and are of the form 2k-1

Input: 100
Output: 3 7 31 

The idea is to generate all the primes less than or equal to the given number n using Sieve of Eratosthenes. Once we have generated all such primes, we iterate through all numbers of the form 2k-1 and check if they are primes or not.

Below is C++ implementation of the idea.

// Program to generate mersenne primes
using namespace std;

// Generate all prime numbers less than n.
void SieveOfEratosthenes(int n, bool prime[])
    // Initialize all entries of boolean array
    // as true. A value in prime[i] will finally
    // be false if i is Not a prime, else true
    // bool prime[n+1];
    for (int i=0; i<=n; i++)
        prime[i] = true;

    for (int p=2; p*p<=n; p++)
        // If prime[p] is not changed, then it
        // is a prime
        if (prime[p] == true)
            // Update all multiples of p
            for (int i=p*2; i<=n; i += p)
                prime[i] = false;

// Function to generate mersenne primes less
// than or equal to n
void mersennePrimes(int n)
    // Create a boolean array "prime[0..n]"
    bool prime[n+1];

    // Generating primes using Sieve

    // Generate all numbers of the form 2^k - 1
    // and smaller than or equal to n.
    for (int k=2; ((1<<k)-1) <= n; k++)
        long long num = (1<<k) - 1;

        // Checking whether number is prime and is
        // one less then the power of 2
        if (prime[num])
            cout << num << " ";

// Driven program
int main()
    int n = 31;
    cout << "Mersenne prime numbers smaller "
         << "than or equal to " << n << endl;
    return 0;


Mersenne prime numbers smaller than or equal to 31
3 7 31 


This article is contributed by Rahul Agrawal. If you like GeeksforGeeks and would like to contribute, you can also write an article using or mail your article to See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

Recommended Posts:

2 Average Difficulty : 2/5.0
Based on 1 vote(s)

Writing code in comment? Please use, generate link and share the link here.