Print all multiplicative primes <= N

• Last Updated : 23 Jun, 2022

Given an integer N, the task is to print all the multiplicative primes â‰¤ N.

Multiplicative Primes are the primes such that the product of their digits is also a prime. For example; 2, 3, 7, 13, 17, …

Examples:

Input: N = 10
Output: 2 3 5 7
Input: N = 3
Output: 2 3

Approach: Using Sieve of Eratosthenes check for all the primes â‰¤ N whether they are multiplicative primes i.e. product of their digits is also a prime. If yes then print those multiplicative primes.
Below is the implementation of the above approach:

C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function to return the digit product of n``int` `digitProduct(``int` `n)``{``    ``int` `prod = 1;``    ``while` `(n) {``        ``prod = prod * (n % 10);``        ``n = n / 10;``    ``}` `    ``return` `prod;``}` `// Function to print all multiplicative primes <= n``void` `printMultiplicativePrimes(``int` `n)``{``    ``// Create a boolean array "prime[0..n+1]". A``    ``// value in prime[i] will finally be false``    ``// if i is Not a prime, else true.``    ``bool` `prime[n + 1];``    ``memset``(prime, ``true``, ``sizeof``(prime));` `    ``prime[0] = 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]) {` `            ``// Update all multiples of p``            ``for` `(``int` `i = p * 2; i <= n; i += p)``                ``prime[i] = ``false``;``        ``}``    ``}` `    ``for` `(``int` `i = 2; i <= n; i++) {` `        ``// If i is prime and its digit sum is also prime``        ``// i.e. i is a multiplicative prime``        ``if` `(prime[i] && prime[digitProduct(i)])``            ``cout << i << ``" "``;``    ``}``}` `// Driver code``int` `main()``{``    ``int` `n = 10;``    ``printMultiplicativePrimes(n);``}`

Java

 `// Java implementation of the approach``import` `java.io.*;` `class` `GFG``{` `// Function to return the digit product of n``static` `int` `digitProduct(``int` `n)``{``    ``int` `prod = ``1``;``    ``while` `(n > ``0``)``    ``{``        ``prod = prod * (n % ``10``);``        ``n = n / ``10``;``    ``}``    ``return` `prod;``}` `// Function to print all multiplicative primes <= n``static` `void` `printMultiplicativePrimes(``int` `n)``{``    ``// Create a boolean array "prime[0..n+1]". A``    ``// value in prime[i] will finally be false``    ``// if i is Not a prime, else true.``    ``boolean` `prime[] = ``new` `boolean``[n + ``1` `];``    ``for``(``int` `i = ``0``; i <= n; i++)``     ``prime[i] = ``true``;` `    ``prime[``0``] = 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])``        ``{` `            ``// Update all multiples of p``            ``for` `(``int` `i = p * ``2``; i <= n; i += p)``                ``prime[i] = ``false``;``        ``}``    ``}` `    ``for` `(``int` `i = ``2``; i <= n; i++)``    ``{` `        ``// If i is prime and its digit sum is also prime``        ``// i.e. i is a multiplicative prime``        ``if` `(prime[i] && prime[digitProduct(i)])``            ``System.out.print( i + ``" "``);``    ``}``}` `    ``// Driver code``    ``public` `static` `void` `main (String[] args)``    ``{``        ``int` `n = ``10``;``        ``printMultiplicativePrimes(n);``    ``}``}` `// This code is contributed by shs..`

Python3

 `# Python 3 implementation of the approach``from` `math ``import` `sqrt` `# Function to return the digit product of n``def` `digitProduct(n):``    ``prod ``=` `1``    ``while` `(n):``        ``prod ``=` `prod ``*` `(n ``%` `10``)``        ``n ``=` `int``(n ``/` `10``)` `    ``return` `prod` `# Function to print all multiplicative``# primes <= n``def` `printMultiplicativePrimes(n):``    ` `    ``# Create a boolean array "prime[0..n+1]".``    ``# A value in prime[i] will finally be``    ``# false if i is Not a prime, else true.``    ``prime ``=` `[``True` `for` `i ``in` `range``(n ``+` `1``)]` `    ``prime[``0``] ``=` `prime[``1``] ``=` `False``    ``for` `p ``in` `range``(``2``, ``int``(sqrt(n)) ``+` `1``, ``1``):``        ` `        ``# If prime[p] is not changed,``        ``# then it is a prime``        ``if` `(prime[p]):``            ` `            ``# Update all multiples of p``            ``for` `i ``in` `range``(p ``*` `2``, n ``+` `1``, p):``                ``prime[i] ``=` `False``        ` `    ``for` `i ``in` `range``(``2``, n ``+` `1``, ``1``):``        ` `        ``# If i is prime and its digit sum``        ``# is also prime i.e. i is a``        ``# multiplicative prime``        ``if` `(prime[i] ``and` `prime[digitProduct(i)]):``            ``print``(i, end ``=` `" "``)` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ``n ``=` `10``    ``printMultiplicativePrimes(n)` `# This code is contributed by``# Surendra_Gangwar`

C#

 `// C# implementation of the approach``class` `GFG``{` `// Function to return the digit product of n``static` `int` `digitProduct(``int` `n)``{``    ``int` `prod = 1;``    ``while` `(n > 0)``    ``{``        ``prod = prod * (n % 10);``        ``n = n / 10;``    ``}``    ``return` `prod;``}` `// Function to print all multiplicative primes <= n``static` `void` `printMultiplicativePrimes(``int` `n)``{``    ``// Create a boolean array "prime[0..n+1]". A``    ``// value in prime[i] will finally be false``    ``// if i is Not a prime, else true.``    ``bool``[] prime = ``new` `bool``[n + 1 ];``    ` `    ``for``(``int` `i = 0; i <= n; i++)``        ``prime[i] = ``true``;` `    ``prime[0] = 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])``        ``{` `            ``// Update all multiples of p``            ``for` `(``int` `i = p * 2; i <= n; i += p)``                ``prime[i] = ``false``;``        ``}``    ``}` `    ``for` `(``int` `i = 2; i <= n; i++)``    ``{` `        ``// If i is prime and its digit sum is also prime``        ``// i.e. i is a multiplicative prime``        ``if` `(prime[i] && prime[digitProduct(i)])``            ``System.Console.Write( i + ``" "``);``    ``}``}` `    ``// Driver code``    ``static` `void` `Main()``    ``{``        ``int` `n = 10;``        ``printMultiplicativePrimes(n);``    ``}``}` `// This code is contributed by chandan_jnu`

PHP

 ``

Javascript

 ``

Output:

`2 3 5 7`

Time Complexity: O(n3/2)

Auxiliary Space: O(n)

My Personal Notes arrow_drop_up