Comprobar si un número es Full Prime

Un número primo completo es aquel en el que el número en sí es primo y todos sus dígitos también son primos. Dado un número n, verifique si es Full Prime o no.
Ejemplos: 
 

Input : 53
Output : Yes
Explanation: Number 53 is prime and
its digits are also prime.

Input : 41
Output : No
Explanation: Number 41 is prime but
its digits are not prime.

El enfoque ingenuo será verificar si el número es primo o no y luego verificar si los dígitos son primos o no, pero esto no será lo suficientemente eficiente.
El método eficiente es hacerlo al revés, ya que habrá muy pocos números de cada 1000 números para los que tenemos que comprobar si es primo o no, el resto de los números fallarán cuando sus dígitos no sean primos. 
 

CPP

// CPP program for checking of
// full prime
#include <bits/stdc++.h>
using namespace std;
 
// function to check digits
bool checkDigits(int n)
{
    // check all digits are prime or not
    while (n) {
        int dig = n % 10;
 
        // check if digits are prime or not
        if (dig != 2 && dig != 3 &&
            dig != 5 && dig != 7)
            return false;
 
        n /= 10;
    }
 
    return true;
}
 
// To check if n is prime or not
bool prime(int n)
{
    if (n == 1)
        return false;
 
    // check for all factors
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0)
            return false;
    }
 
    return true;
}
 
// To check if n is Full Prime
int isFullPrime(int n)
{
    // The order is important here for
    // efficiency.
    return (checkDigits(n) && prime(n));
}
 
// Driver code to check the above function
int main()
{
    int n = 53;
    if (isFullPrime(n))
       cout << "Yes";
    else
       cout << "No";
    return 0;
}

Java

// Java program for checking
// of full prime
import java.util.*;
 
class Prime{
     
    // function to check digits
    public static boolean checkDigits(int n)
    {
        // check all digits are prime or not
        while (n > 0) {
            int dig = n % 10;
 
            // check if digits are prime or not
            if (dig != 2 && dig != 3 &&
                dig != 5 && dig != 7)
                return false;
 
            n /= 10;
        }
 
        return true;
    }
     
    // To check if n is prime or not
    public static boolean prime(int n)
    {
        if (n == 1)
            return false;
 
        // check for all factors
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0)
                return false;
        }
 
        return true;
    }
     
    // To check if n is Full Prime
    public static boolean isFullPrime(int n)
    {
        // The order is important here for
        // efficiency
        return (checkDigits(n) && prime(n));
    }
     
    // driver code
    public static void main(String[] args)
    {
        int n = 53;
        if (isFullPrime(n))
            System.out.print( "Yes" );
        else
            System.out.print( "No");
    }
}
 
// This code is contributed by rishabh_jain

Python

# Python program for checking
# of full prime
 
# function to check digits
def checkDigits(n):
 
    # check all digits are
    # prime or not
    while (n) :
        dig = n % 10
 
        # check if digits are
        # prime or not
        if (dig != 2 and
                   dig != 3 and dig != 5
                   and dig != 7) :
            return 0
        n = n / 10
 
    return 1
 
# To check if n is prime or not
def prime(n):
    if (n == 1):
        return 0
         
    # check for all factors
    i = 2
    while i * i <= n :
        if (n % i == 0):
            return 0
        i = i + 1
    return 1
 
# To check if n is Full Prime
def isFullPrime(n) :
 
    # The order is important here
    # for efficiency.
    return (checkDigits(n) and prime(n))
 
# Driver code
n = 53
if (isFullPrime(n)) :
    print("Yes")
else :
    print("No")
 
# This code is contributed by rishabh_jain

C#

// C# program for checking
// of full prime
using System;
 
class Prime
{
     
    // function to check digits
    public static bool checkDigits(int n)
    {
        // check all digits are prime or not
        while (n > 0) {
            int dig = n % 10;
 
            // check if digits are prime or not
            if (dig != 2 && dig != 3 &&
                dig != 5 && dig != 7)
                return false;
 
            n /= 10;
        }
 
        return true;
    }
     
    // To check if n is prime or not
    public static bool prime(int n)
    {
        if (n == 1)
            return false;
 
        // check for all factors
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0)
                return false;
        }
 
        return true;
    }
     
    // To check if n is Full Prime
    public static bool isFullPrime(int n)
    {
        // The order is important here for
        // efficiency
        return (checkDigits(n) && prime(n));
    }
     
    // Driver code
    public static void Main()
    {
        int n = 53;
        if (isFullPrime(n))
            Console.WriteLine( "Yes" );
        else
            Console.WriteLine( "No");
    }
}
 
// This code is contributed by vt_m

PHP

<?php
// PHP program for checking
// of full prime
 
// function to check digits
function checkDigits($n)
{
    // check all digits
    // are prime or not
    while ($n)
    {
        $dig = $n % 10;
 
        // check if digits are
        // prime or not
        if ($dig != 2 && $dig != 3 &&
            $dig != 5 && $dig != 7)
            return false;
 
        $n = (int)($n / 10);
    }
 
    return true;
}
 
// To check if n is prime or not
function prime($n)
{
    if ($n == 1)
        return false;
 
    // check for all factors
    for ($i = 2; $i * $i <= $n; $i++)
    {
        if ($n % $i == 0)
            return false;
    }
 
    return true;
}
 
// To check if n is Full Prime
function isFullPrime($n)
{
    // The order is important
    // here for efficiency.
    return (checkDigits($n) &&
            prime($n));
}
 
// Driver Code
$n = 53;
if (isFullPrime($n))
    echo("Yes");
else
    echo("No");
 
// This code is contributed by Ajit.
?>

Javascript

<script>
    // Javascript program for checking of full prime
     
    // function to check digits
    function checkDigits(n)
    {
        // check all digits are prime or not
        while (n > 0) {
            let dig = n % 10;
   
            // check if digits are prime or not
            if (dig != 2 && dig != 3 &&
                dig != 5 && dig != 7)
                return false;
   
            n = parseInt(n / 10, 10);
        }
   
        return true;
    }
       
    // To check if n is prime or not
    function prime(n)
    {
        if (n == 1)
            return false;
   
        // check for all factors
        for (let i = 2; i * i <= n; i++) {
            if (n % i == 0)
                return false;
        }
   
        return true;
    }
       
    // To check if n is Full Prime
    function isFullPrime(n)
    {
        // The order is important here for
        // efficiency
        return (checkDigits(n) && prime(n));
    }
     
    let n = 53;
    if (isFullPrime(n))
      document.write( "Yes" );
    else
      document.write( "No");
         
</script>

Producción : 
 

Yes

Si nos dan varios números y el rango de números es lo suficientemente pequeño como para que podamos almacenarlos en una array, podemos usar Sieve of Eratosthenes para responder consultas rápidamente.
 

Publicación traducida automáticamente

Artículo escrito por Rahul_ y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *