Print all Proth primes up to N
Given a number N, the task is to check whether the given number is Proth Prime or not.
A Proth prime is a Proth Number which is prime.
The first few Proth primes are –
3, 5, 13, 17, 41, 97, 113, 193, 241, 257, 353, 449, 577, 641, 673, 769, 929, 1153, 1217, …..
Examples:
Input: 41
Output: 41 is Proth Prime
Input: 19
Output: 19 is not a Proth Prime
Approach:
The idea is to find primes upto N using Sieve of Eratosthenes. Then check whether the given number is Proth Number or not. If number is a Proth Number and is also a prime number, then given number is Proth Prime.
Below is the implementation of the above algorithm:
C++
#include <bits/stdc++.h>
using namespace std;
int prime[1000000];
void SieveOfEratosthenes( int n)
{
for ( int i = 1; i <= n + 1; i++)
prime[i] = true ;
prime[1] = false ;
for ( int p = 2; p * p <= n; p++) {
if (prime[p] == true ) {
for ( int i = p * p; i <= n; i += p)
prime[i] = false ;
}
}
}
bool isPowerOfTwo( int n)
{
return (n && !(n & (n - 1)));
}
bool isProthNumber( int n)
{
int k = 1;
while (k < (n / k)) {
if (n % k == 0) {
if (isPowerOfTwo(n / k))
return true ;
}
k = k + 2;
}
return false ;
}
bool isProthPrime( int n)
{
if (isProthNumber(n - 1)) {
if (prime[n])
return true ;
else
return false ;
}
else
return false ;
}
int main()
{
int n = 41;
SieveOfEratosthenes(n);
for ( int i = 1; i <= n; i++)
if (isProthPrime(i))
cout << i << endl;
return 0;
}
|
Java
import java.util.*;
class GFG
{
static boolean [] prime = new boolean [ 1000000 ];
static void SieveOfEratosthenes( int n)
{
for ( int i = 1 ; i <= n + 1 ; i++)
prime[i] = true ;
prime[ 1 ] = false ;
for ( int p = 2 ; p * p <= n; p++)
{
if (prime[p] == true )
{
for ( int i = p * p; i <= n; i += p)
prime[i] = false ;
}
}
}
static boolean isPowerOfTwo( int n)
{
return (n > 0 && (n & (n - 1 )) == 0 );
}
static boolean isProthNumber( int n)
{
int k = 1 ;
while (k < ( int )(n / k))
{
if (n % k == 0 )
{
if (isPowerOfTwo(( int )(n / k)))
return true ;
}
k = k + 2 ;
}
return false ;
}
static boolean isProthPrime( int n)
{
if (isProthNumber(n - 1 ))
{
if (prime[n])
return true ;
else
return false ;
}
else
return false ;
}
public static void main(String args[])
{
int n = 41 ;
SieveOfEratosthenes(n);
for ( int i = 1 ; i <= n; i++)
if (isProthPrime(i))
System.out.println(i);
}
}
|
Python3
import math as mt
prime = [ 0 for i in range ( 1000000 )]
def SieveOfEratosthenes(n):
for i in range ( 1 , n + 2 ):
prime[i] = True
prime[ 1 ] = False
for p in range ( 2 , mt.ceil(n * * ( 0.5 ))):
if (prime[p] = = True ):
for i in range (p * p, n + 1 , p):
prime[i] = False
def isPowerOfTwo(n):
return (n and (n & (n - 1 )) = = False )
def isProthNumber(n):
k = 1
while (k < (n / / k)):
if (n % k = = 0 ):
if (isPowerOfTwo(n / / k)):
return True
k = k + 2
return False
def isProthPrime(n):
if (isProthNumber(n - 1 )):
if (prime[n]):
return True
else :
return False
else :
return False
n = 41
SieveOfEratosthenes(n)
for i in range ( 1 , n + 1 ):
if isProthPrime(i) = = True :
print (i)
|
C#
using System;
class GFG
{
static Boolean[] prime = new Boolean[1000000];
static void SieveOfEratosthenes( int n)
{
for ( int i = 1; i <= n + 1; i++)
prime[i] = true ;
prime[1] = false ;
for ( int p = 2; p * p <= n; p++)
{
if (prime[p] == true )
{
for ( int i = p * p; i <= n; i += p)
prime[i] = false ;
}
}
}
static Boolean isPowerOfTwo( int n)
{
return (n > 0 && (n & (n - 1)) == 0);
}
static Boolean isProthNumber( int n)
{
int k = 1;
while (k < ( int )(n / k))
{
if (n % k == 0)
{
if (isPowerOfTwo(( int )(n / k)))
return true ;
}
k = k + 2;
}
return false ;
}
static Boolean isProthPrime( int n)
{
if (isProthNumber(n - 1))
{
if (prime[n])
return true ;
else
return false ;
}
else
return false ;
}
static public void Main(String []args)
{
int n = 41;
SieveOfEratosthenes(n);
for ( int i = 1; i <= n; i++)
if (isProthPrime(i))
Console.WriteLine(i);
}
}
|
PHP
<?php
$GLOBALS [ 'prime' ] = array ();
function SieveOfEratosthenes( $n )
{
for ( $i = 1; $i <= $n + 1; $i ++)
$GLOBALS [ 'prime' ][ $i ] = true;
$GLOBALS [ 'prime' ][1] = false;
for ( $p = 2; $p * $p <= $n ; $p ++)
{
if ( $GLOBALS [ 'prime' ][ $p ] == true)
{
for ( $i = $p * $p ; $i <= $n ; $i += $p )
$GLOBALS [ 'prime' ][ $i ] = false;
}
}
}
function isPowerOfTwo( $n )
{
return ( $n && !( $n & ( $n - 1)));
}
function isProthNumber( $n )
{
$k = 1;
while ( $k < ( $n / $k ))
{
if ( $n % $k == 0)
{
if (isPowerOfTwo( $n / $k ))
return true;
}
$k = $k + 2;
}
return false;
}
function isProthPrime( $n )
{
if (isProthNumber( $n - 1))
{
if ( $GLOBALS [ 'prime' ][ $n ])
return true;
else
return false;
}
else
return false;
}
$n = 41;
SieveOfEratosthenes( $n );
for ( $i = 1; $i <= $n ; $i ++)
if (isProthPrime( $i ) == true)
echo $i , "\n" ;
?>
|
Javascript
<script>
let prime = new Array();
function SieveOfEratosthenes(n)
{
for (let i = 1; i <= n + 1; i++)
prime[i] = true ;
prime[1] = false ;
for (let p = 2; p * p <= n; p++)
{
if (prime[p] == true )
{
for (let i = p * p; i <= n; i += p)
prime[i] = false ;
}
}
}
function isPowerOfTwo(n)
{
return (n && !(n & (n - 1)));
}
function isProthNumber(n)
{
let k = 1;
while (k < (n / k))
{
if (n % k == 0)
{
if (isPowerOfTwo(n / k))
return true ;
}
k = k + 2;
}
return false ;
}
function isProthPrime(n)
{
if (isProthNumber(n - 1))
{
if (prime[n])
return true ;
else
return false ;
}
else
return false ;
}
let n = 41;
SieveOfEratosthenes(n);
for (let i = 1; i <= n; i++)
if (isProthPrime(i) == true )
document.write(i + "<br>" );
</script>
|
Time Complexity: O(n*log(log(n)))
Auxiliary Space: O(1), constant extra space is required as the size of the prime array is constant.
References:
Last Updated :
16 Oct, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...