📜  检查数字是否为全素

📅  最后修改于: 2021-04-23 18:25:34             🧑  作者: Mango

全质数是一个数字,其中数字本身是质数,并且所有数字也都是质数。给定数字n,请检查其是否为全素数。

例子 :

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.

天真的方法是先检查数字是否为质数,然后再检查数字是否为质数,但这效率不高。

一种有效的方法是相反的方法,因为每1000个数字中只有很少的数字需要检查其是否为质数,其余所有数字在其数字不是质数时都将失败。

CPP
// CPP program for checking of
// full prime
#include 
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


输出 :

Yes

如果给定多个数字,并且数字的范围足够小,可以将它们存储在数组中,则可以使用Eratosthenes的Sieve来快速回答查询。