全质数是一个数字,其中数字本身是质数,并且所有数字也都是质数。给定数字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来快速回答查询。