# 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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++

 `// C++ implementation of the above approach ` `#include ` `using` `namespace` `std; ` `int` `prime; ` ` `  `// Calculate all primes upto n. ` `void` `SieveOfEratosthenes(``int` `n) ` `{ ` `    ``// Initialize all entries it as true. ` `    ``// A value in prime[i] will finally ` `    ``// false if i is Not a prime, else true. ` `    ``for` `(``int` `i = 1; i <= n + 1; i++) ` `        ``prime[i] = ``true``; ` ` `  `    ``prime = ``false``; ` ` `  `    ``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 ` `            ``// greater than or equal to ` `            ``// the square of it numbers ` `            ``// which are multiple of p and are ` `            ``// less than p^2 are already been marked. ` `            ``for` `(``int` `i = p * p; i <= n; i += p) ` `                ``prime[i] = ``false``; ` `        ``} ` `    ``} ` `} ` ` `  `// Utility function to check power of two ` `bool` `isPowerOfTwo(``int` `n) ` `{ ` `    ``return` `(n && !(n & (n - 1))); ` `} ` ` `  `// Function to check if the Given ` `// number is Proth number or not ` `bool` `isProthNumber(``int` `n) ` `{ ` ` `  `    ``int` `k = 1; ` `    ``while` `(k < (n / k)) { ` ` `  `        ``// check if k divides n or not ` `        ``if` `(n % k == 0) { ` ` `  `            ``// Check if n/k is power of 2 or not ` `            ``if` `(isPowerOfTwo(n / k)) ` `                ``return` `true``; ` `        ``} ` ` `  `        ``// update k to next odd number ` `        ``k = k + 2; ` `    ``} ` ` `  `    ``// If we reach here means there ` `    ``// exists no value of K such ` `    ``// that k is odd number and n/k ` `    ``// is a power of 2 greater than k ` `    ``return` `false``; ` `} ` ` `  `// Function to check whether the given ` `// number is Proth Prime or Not. ` `bool` `isProthPrime(``int` `n) ` `{ ` `    ``// Check n for Proth Number ` `    ``if` `(isProthNumber(n - 1)) { ` ` `  `        ``// if number is prime, return true ` `        ``if` `(prime[n]) ` `            ``return` `true``; ` `        ``else` `            ``return` `false``; ` `    ``} ` `    ``else` `        ``return` `false``; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `n = 41; ` ` `  `    ``// if number is proth number, ` `    ``// calculate primes upto n ` `    ``SieveOfEratosthenes(n); ` ` `  `    ``for` `(``int` `i = 1; i <= n; i++) ` `        ``// Check n for Proth Prime ` `        ``if` `(isProthPrime(i)) ` `            ``cout << i << endl; ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the above approach ` `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` ` `  `static` `boolean``[] prime = ``new` `boolean``[``1000000``]; ` ` `  `// Calculate all primes upto n. ` `static` `void` `SieveOfEratosthenes(``int` `n) ` `{ ` `    ``// Initialize all entries it as true. ` `    ``// A value in prime[i] will finally ` `    ``// false if i is Not a prime, else true. ` `    ``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] is not changed, ` `        ``// then it is a prime ` `        ``if` `(prime[p] == ``true``)  ` `        ``{ ` ` `  `            ``// Update all multiples of p ` `            ``// greater than or equal to ` `            ``// the square of it numbers ` `            ``// which are multiple of p and are ` `            ``// less than p^2 are already been marked. ` `            ``for` `(``int` `i = p * p; i <= n; i += p) ` `                ``prime[i] = ``false``; ` `        ``} ` `    ``} ` `} ` ` `  `// Utility function to check power of two ` `static` `boolean` `isPowerOfTwo(``int` `n) ` `{ ` `    ``return` `(n > ``0` `&& (n & (n - ``1``)) == ``0``); ` `} ` ` `  `// Function to check if the Given ` `// number is Proth number or not ` `static` `boolean` `isProthNumber(``int` `n) ` `{ ` ` `  `    ``int` `k = ``1``; ` `    ``while` `(k < (``int``)(n / k))  ` `    ``{ ` ` `  `        ``// check if k divides n or not ` `        ``if` `(n % k == ``0``) ` `        ``{ ` ` `  `            ``// Check if n/k is power of 2 or not ` `            ``if` `(isPowerOfTwo((``int``)(n / k))) ` `                ``return` `true``; ` `        ``} ` ` `  `        ``// update k to next odd number ` `        ``k = k + ``2``; ` `    ``} ` ` `  `    ``// If we reach here means there ` `    ``// exists no value of K such ` `    ``// that k is odd number and n/k ` `    ``// is a power of 2 greater than k ` `    ``return` `false``; ` `} ` ` `  `// Function to check whether the given ` `// number is Proth Prime or Not. ` `static` `boolean` `isProthPrime(``int` `n) ` `{ ` `    ``// Check n for Proth Number ` `    ``if` `(isProthNumber(n - ``1``)) ` `    ``{ ` ` `  `        ``// if number is prime, return true ` `        ``if` `(prime[n]) ` `            ``return` `true``; ` `        ``else` `            ``return` `false``; ` `    ``} ` `    ``else` `        ``return` `false``; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``int` `n = ``41``; ` ` `  `    ``// if number is proth number, ` `    ``// calculate primes upto n ` `    ``SieveOfEratosthenes(n); ` ` `  `    ``for` `(``int` `i = ``1``; i <= n; i++) ` `        ``// Check n for Proth Prime ` `        ``if` `(isProthPrime(i)) ` `            ``System.out.println(i); ` `} ` `} ` ` `  `// This code is contributed by ` `// Surendra_Gangwar `

## Python3

 `# Python3 implementation of the ` `# above approach ` `import` `math as mt ` ` `  `prime ``=` `[``0` `for` `i ``in` `range``(``1000000``)] ` ` `  `# Calculate all primes upto n. ` `def` `SieveOfEratosthenes(n): ` `     `  `    ``# Initialize all entries it as true. ` `    ``# A value in prime[i] will finally ` `    ``# false if i is Not a prime, else true. ` `    ``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] is not changed, ` `        ``# then it is a prime ` `        ``if` `(prime[p] ``=``=` `True``): ` ` `  `            ``# Update all multiples of p ` `            ``# greater than or equal to ` `            ``# the square of it numbers ` `            ``# which are multiple of p and are ` `            ``# less than p^2 are already been marked. ` `            ``for` `i ``in` `range``(p ``*` `p, n ``+` `1``, p): ` `                ``prime[i] ``=` `False` ` `  `# Utility function to check power of two ` `def` `isPowerOfTwo(n): ` `    ``return` `(n ``and` `(n & (n ``-` `1``)) ``=``=` `False``) ` ` `  `# Function to check if the Given ` `# number is Proth number or not ` `def` `isProthNumber(n): ` `     `  `    ``k ``=` `1` `    ``while` `(k < (n ``/``/` `k)): ` ` `  `        ``# check if k divides n or not ` `        ``if` `(n ``%` `k ``=``=` `0``): ` ` `  `            ``# Check if n/k is power of 2 or not ` `            ``if` `(isPowerOfTwo(n ``/``/` `k)): ` `                ``return` `True` `         `  `        ``# update k to next odd number ` `        ``k ``=` `k ``+` `2` `     `  `    ``# If we reach here means there ` `    ``# exists no value of K such ` `    ``# that k is odd number and n/k ` `    ``# is a power of 2 greater than k ` `    ``return` `False` ` `  `# Function to check whether the given ` `# number is Proth Prime or Not. ` `def` `isProthPrime(n): ` ` `  `    ``# Check n for Proth Number ` `    ``if` `(isProthNumber(n ``-` `1``)):  ` ` `  `        ``# if number is prime, return true ` `        ``if` `(prime[n]): ` `            ``return` `True` `        ``else``: ` `            ``return` `False` `     `  `    ``else``: ` `        ``return` `False` ` `  `# Driver Code ` `n ``=` `41` ` `  `# if number is proth number, ` `# calculate primes upto n ` `SieveOfEratosthenes(n) ` ` `  `for` `i ``in` `range``(``1``, n ``+` `1``): ` `     `  `    ``# Check n for Proth Prime ` `    ``if` `isProthPrime(i) ``=``=` `True``: ` `        ``print``(i) ` `         `  `# This code is contributed by  ` `# Mohit kumar 29 `

## C#

 `// C# implementation of the above approach ` `using` `System; ` ` `  `class` `GFG ` `{ ` ` `  `static` `Boolean[] prime = ``new` `Boolean; ` ` `  `// Calculate all primes upto n. ` `static` `void` `SieveOfEratosthenes(``int` `n) ` `{ ` `    ``// Initialize all entries it as true. ` `    ``// A value in prime[i] will finally ` `    ``// false if i is Not a prime, else true. ` `    ``for` `(``int` `i = 1; i <= n + 1; i++) ` `        ``prime[i] = ``true``; ` ` `  `    ``prime = ``false``; ` ` `  `    ``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 ` `            ``// greater than or equal to ` `            ``// the square of it numbers ` `            ``// which are multiple of p and are ` `            ``// less than p^2 are already been marked. ` `            ``for` `(``int` `i = p * p; i <= n; i += p) ` `                ``prime[i] = ``false``; ` `        ``} ` `    ``} ` `} ` ` `  `// Utility function to check power of two ` `static` `Boolean isPowerOfTwo(``int` `n) ` `{ ` `    ``return` `(n > 0 && (n & (n - 1)) == 0); ` `} ` ` `  `// Function to check if the Given ` `// number is Proth number or not ` `static` `Boolean isProthNumber(``int` `n) ` `{ ` ` `  `    ``int` `k = 1; ` `    ``while` `(k < (``int``)(n / k))  ` `    ``{ ` ` `  `        ``// check if k divides n or not ` `        ``if` `(n % k == 0) ` `        ``{ ` ` `  `            ``// Check if n/k is power of 2 or not ` `            ``if` `(isPowerOfTwo((``int``)(n / k))) ` `                ``return` `true``; ` `        ``} ` ` `  `        ``// update k to next odd number ` `        ``k = k + 2; ` `    ``} ` ` `  `    ``// If we reach here means there ` `    ``// exists no value of K such ` `    ``// that k is odd number and n/k ` `    ``// is a power of 2 greater than k ` `    ``return` `false``; ` `} ` ` `  `// Function to check whether the given ` `// number is Proth Prime or Not. ` `static` `Boolean isProthPrime(``int` `n) ` `{ ` `    ``// Check n for Proth Number ` `    ``if` `(isProthNumber(n - 1)) ` `    ``{ ` ` `  `        ``// if number is prime, return true ` `        ``if` `(prime[n]) ` `            ``return` `true``; ` `        ``else` `            ``return` `false``; ` `    ``} ` `    ``else` `        ``return` `false``; ` `} ` ` `  `// Driver Code ` `static` `public` `void` `Main(String []args) ` `{ ` `    ``int` `n = 41; ` ` `  `    ``// if number is proth number, ` `    ``// calculate primes upto n ` `    ``SieveOfEratosthenes(n); ` ` `  `    ``for` `(``int` `i = 1; i <= n; i++) ` `     `  `        ``// Check n for Proth Prime ` `        ``if` `(isProthPrime(i)) ` `            ``Console.WriteLine(i); ` `} ` `} ` ` `  `// This code is contributed by Arnab Kundu `

## PHP

 ` `

Output:

```3
5
13
17
41
```

Time Complexity: O(n*log(log(n)))

References:

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.