Sum of all mersenne numbers present in an array
Last Updated :
31 May, 2022
Given an array of integers arr[], the task is to find the sum of all the Mersenne numbers from the array. A number is a Mersenne number if it is greater than 0 and is one less than some power of 2. First few Mersenne numbers are 1, 3, 7, 15, 31, 63, 127, …
Examples:
Input: arr[] = {17, 6, 7, 63, 3}
Output: 73
Only 7, 63 and 3 are Mersenne numbers i.e. 7 + 63 + 3 = 73
Input: arr[] = {1, 3, 11, 45}
Output: 4
Approach: Initialise sum = 0 and start traversing all the elements of the array, if current element is one less than some power of 2 and is greater than 0 then update sum = sum + arr[i]. Print the sum in the end.
Below is the implementation of the above approach:
C++
#include <iostream>
using namespace std;
int isMersenne( int n)
{
while (n != 0)
{
int r = n % 2;
if (r == 0)
return false ;
n /= 2;
}
return true ;
}
int sumOfMersenne( int arr[], int n)
{
int sum = 0;
for ( int i = 0; i < n; i++)
{
if (arr[i] > 0 && isMersenne(arr[i]))
{
sum += arr[i];
}
}
return sum;
}
int main()
{
int arr[] = { 17, 6, 7, 63, 3 };
int n = sizeof (arr) / sizeof ( int );
cout << (sumOfMersenne(arr, n));
return 0;
}
|
Java
class GFG {
static boolean isMersenne( int n)
{
while (n != 0 ) {
int r = n % 2 ;
if (r == 0 )
return false ;
n /= 2 ;
}
return true ;
}
static int sumOfMersenne( int [] arr, int n)
{
int sum = 0 ;
for ( int i = 0 ; i < n; i++) {
if (arr[i] > 0 && isMersenne(arr[i])) {
sum += arr[i];
}
}
return sum;
}
public static void main(String[] args)
{
int [] arr = { 17 , 6 , 7 , 63 , 3 };
int n = arr.length;
System.out.print(sumOfMersenne(arr, n));
}
}
|
Python3
def isMersenne(n) :
while (n ! = 0 ) :
r = n % 2 ;
if (r = = 0 ) :
return False ;
n / / = 2 ;
return True ;
def sumOfMersenne(arr, n) :
sum = 0 ;
for i in range (n) :
if (arr[i] > 0 and isMersenne(arr[i])) :
sum + = arr[i];
return sum ;
if __name__ = = "__main__" :
arr = [ 17 , 6 , 7 , 63 , 3 ];
n = len (arr);
print (sumOfMersenne(arr, n));
|
C#
using System;
class GFG
{
static bool isMersenne( int n)
{
while (n != 0)
{
int r = n % 2;
if (r == 0)
return false ;
n /= 2;
}
return true ;
}
static int sumOfMersenne( int [] arr, int n)
{
int sum = 0;
for ( int i = 0; i < n; i++)
{
if (arr[i] > 0 && isMersenne(arr[i]))
{
sum += arr[i];
}
}
return sum;
}
static public void Main ()
{
int [] arr = { 17, 6, 7, 63, 3 };
int n = arr.Length;
Console.WriteLine(sumOfMersenne(arr, n));
}
}
|
Javascript
<script>
function isMersenne( n)
{
while (n != 0)
{
let r = n % 2;
if (r == 0)
return false ;
n = Math.floor(n / 2);
}
return true ;
}
function sumOfMersenne(arr, n)
{
let sum = 0;
for (let i = 0; i < n; i++)
{
if (arr[i] > 0 && isMersenne(arr[i]))
{
sum += arr[i];
}
}
return sum;
}
let arr = [ 17, 6, 7, 63, 3 ];
let n = arr.length;
document.write(sumOfMersenne(arr, n));
</script>
|
Time Complexity : O(nlogn)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...