# Print all multiplicative primes <= N

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

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

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 = prime = ``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 = prime = ``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

 ` `

Output:

```2 3 5 7
```

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.