Related Articles

# Print all safe primes below N

• Difficulty Level : Medium
• Last Updated : 14 Apr, 2021

Given an integer N, the task is to print all safe primes below N safe primes. A safe prime is a prime number of the form (2 * p) + 1 where p is also a prime

The first few safe primes are 5, 7, 11, 23, 47, …

Examples:

Input: N = 13
Output: 5 7 11
5 = 2 * 2 + 1
7 = 2 * 3 + 1
11 = 2 * 5 + 1

Input: N = 6
Output: 5 7

Approach: First pre-compute all the primes till N using Sieve of Eratosthenes and then starting from 2 check whether the current prime is also a safe prime. If yes then print it else skip to the next prime.

Below is the implementation of above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function to print first n safe primes``void` `printSafePrimes(``int` `n)``{``    ``int` `prime[n + 1];` `    ``// Initialize all entries of integer array``    ``// as 1. A value in prime[i] will finally``    ``// be 0 if i is Not a prime, else 1``    ``for` `(``int` `i = 2; i <= n; i++)``        ``prime[i] = 1;` `    ``// 0 and 1 are not primes``    ``prime[0] = prime[1] = 0;` `    ``for` `(``int` `p = 2; p * p <= n; p++) {` `        ``// If prime[p] is not changed, then``        ``//  it is a prime``        ``if` `(prime[p] == 1) {` `            ``// Update all multiples of p``            ``for` `(``int` `i = p * 2; i <= n; i += p)``                ``prime[i] = 0;``        ``}``    ``}` `    ``for` `(``int` `i = 2; i <= n; i++) {` `        ``// If i is prime``        ``if` `(prime[i] != 0) {` `            ``// 2p + 1``            ``int` `temp = (2 * i) + 1;` `            ``// If 2p + 1 is also a prime``            ``// then set prime[2p + 1] = 2``            ``if` `(temp <= n && prime[temp] != 0)``                ``prime[temp] = 2;``        ``}``    ``}` `    ``for` `(``int` `i = 5; i <= n; i++)` `        ``// i is a safe prime``        ``if` `(prime[i] == 2)``            ``cout << i << ``" "``;``}` `// Driver code``int` `main()``{``    ``int` `n = 20;``    ``printSafePrimes(n);``    ``return` `0;``}`

## Java

 `// Java implementation of the approach``class` `GFG{``    ` `    ``// Function to print first n safe primes``    ``static` `void` `printSafePrimes(``int` `n)``    ``{``        ``int` `prime[] = ``new` `int` `[n + ``1``];``    ` `        ``// Initialize all entries of integer array``        ``// as 1. A value in prime[i] will finally``        ``// be 0 if i is Not a prime, else 1``        ``for` `(``int` `i = ``2``; i <= n; i++)``            ``prime[i] = ``1``;``    ` `        ``// 0 and 1 are not primes``        ``prime[``0``] = prime[``1``] = ``0``;``    ` `        ``for` `(``int` `p = ``2``; p * p <= n; p++)``        ``{``    ` `            ``// If prime[p] is not changed, then``            ``// it is a prime``            ``if` `(prime[p] == ``1``)``            ``{``    ` `                ``// Update all multiples of p``                ``for` `(``int` `i = p * ``2``; i <= n; i += p)``                    ``prime[i] = ``0``;``            ``}``        ``}``    ` `        ``for` `(``int` `i = ``2``; i <= n; i++)``        ``{``    ` `            ``// If i is prime``            ``if` `(prime[i] != ``0``)``            ``{``    ` `                ``// 2p + 1``                ``int` `temp = (``2` `* i) + ``1``;``    ` `                ``// If 2p + 1 is also a prime``                ``// then set prime[2p + 1] = 2``                ``if` `(temp <= n && prime[temp] != ``0``)``                    ``prime[temp] = ``2``;``            ``}``        ``}``    ` `        ``for` `(``int` `i = ``5``; i <= n; i++)``    ` `            ``// i is a safe prime``            ``if` `(prime[i] == ``2``)``                ``System.out.print(i + ``" "``);``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `main(String []args)``    ``{``        ``int` `n = ``20``;``        ``printSafePrimes(n);``    ``}``}` `// This code is contributed by Ryuga`

## Python3

 `# Python 3 implementation of the approach``from` `math ``import` `sqrt` `# Function to print first n safe primes``def` `printSafePrimes(n):``    ``prime ``=` `[``0` `for` `i ``in` `range``(n ``+` `1``)]` `    ``# Initialize all entries of integer``    ``# array as 1. A value in prime[i]``    ``# will finally be 0 if i is Not a``    ``# prime, else 1``    ``for` `i ``in` `range``(``2``, n ``+` `1``):``        ``prime[i] ``=` `1` `    ``# 0 and 1 are not primes``    ``prime[``0``] ``=` `prime[``1``] ``=` `0` `    ``for` `p ``in` `range``(``2``, ``int``(sqrt(n)) ``+` `1``, ``1``):``        ` `        ``# If prime[p] is not changed,``        ``# then it is a prime``        ``if` `(prime[p] ``=``=` `1``):``            ` `            ``# Update all multiples of p``            ``for` `i ``in` `range``(p ``*` `2``, n ``+` `1``, p):``                ``prime[i] ``=` `0``    ` `    ``for` `i ``in` `range``(``2``, n ``+` `1``, ``1``):``        ` `        ``# If i is prime``        ``if` `(prime[i] !``=` `0``):``            ` `            ``# 2p + 1``            ``temp ``=` `(``2` `*` `i) ``+` `1` `            ``# If 2p + 1 is also a prime``            ``# then set prime[2p + 1] = 2``            ``if` `(temp <``=` `n ``and` `prime[temp] !``=` `0``):``                ``prime[temp] ``=` `2` `    ``for` `i ``in` `range``(``5``, n ``+` `1``):``        ` `        ``# i is a safe prime``        ``if` `(prime[i] ``=``=` `2``):``            ``print``(i, end ``=` `" "``)` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ``n ``=` `20``    ``printSafePrimes(n)``    ` `# This code is contributed by``# Sanjit_Prasad`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG{``    ` `    ``// Function to print first n safe primes``    ``static` `void` `printSafePrimes(``int` `n)``    ``{``        ``int``[] prime = ``new` `int` `[n + 1];``    ` `        ``// Initialize all entries of integer array``        ``// as 1. A value in prime[i] will finally``        ``// be 0 if i is Not a prime, else 1``        ``for` `(``int` `i = 2; i <= n; i++)``            ``prime[i] = 1;``    ` `        ``// 0 and 1 are not primes``        ``prime[0] = prime[1] = 0;``    ` `        ``for` `(``int` `p = 2; p * p <= n; p++)``        ``{``    ` `            ``// If prime[p] is not changed, then``            ``// it is a prime``            ``if` `(prime[p] == 1)``            ``{``    ` `                ``// Update all multiples of p``                ``for` `(``int` `i = p * 2; i <= n; i += p)``                    ``prime[i] = 0;``            ``}``        ``}``    ` `        ``for` `(``int` `i = 2; i <= n; i++)``        ``{``    ` `            ``// If i is prime``            ``if` `(prime[i] != 0)``            ``{``    ` `                ``// 2p + 1``                ``int` `temp = (2 * i) + 1;``    ` `                ``// If 2p + 1 is also a prime``                ``// then set prime[2p + 1] = 2``                ``if` `(temp <= n && prime[temp] != 0)``                    ``prime[temp] = 2;``            ``}``        ``}``    ` `        ``for` `(``int` `i = 5; i <= n; i++)``    ` `            ``// i is a safe prime``            ``if` `(prime[i] == 2)``                ``Console.Write(i + ``" "``);``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``int` `n = 20;``        ``printSafePrimes(n);``    ``}``}` `// This code is contributed by Ita_c.`

## PHP

 ``

## Javascript

 ``
Output:
`5 7 11`

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up