一个素数(设为p)依次从最高位去掉一位,二位,三位,……,若得到的各数仍都是素数(注:1不是素数),
且数p的各位数字均不为零,则称该数p为逆向超级素数。
例如,617,17,7都是素数,因此617是逆向超级素数,
尽管503,03,3都是素数,但它不是逆向超级素数,因为它包含有零。
/**
*@author xiao xiao an
*@Time 2014/5/4
*@Content To find super prime
*
* SuPrime.c
*/
#include<stdio.h>
#include<Math.h>
//判断是否有0 int IsZero(int n)
{
int value;
int i;
for(i=0;i<3;i++)
{
value = n%10;
n = n/10;
if(value == 0)
{
return 0;
}
}
return 1;
}
//判断是不是素数
int IsPrime(int n)
{
/** 判断是不是素数
* 如果是素数返回1
* 如果不是素数返回0
*/
int i;
int value = n;
for(i = 2 ; i<=sqrt(value) ; i++)
{
if(value%i == 0)
{
//如果数被整除说明不是素数,返回0
return 0;
}
}
//如果上面都不符合,说明没有被整除,说明是素数,返回1
return 1;
}
int IsSuprime(int n) {
/*
判断abc ,bc,c是否都是素数
*/
int value = n;
if(IsZero(value))
{
int single = value % 10; //最高位去掉2位
int ten = value%100;//最高位去掉1位
if(IsPrime(single)&&IsPrime(ten))//如果都是素数则返回1
return 1;
}
return 0;
}
int main() {
//统计逆向超级素数的个数
int numberOfSuperprime = 0;
printf("输出所有逆向超级素数: ");
int i;
//求出【100,999】内的所有超级素数
for(i = 100 ; i < 1000 ; i++)
{
//判断是否是素数
if(IsPrime(i))
{
//如果是素数,判断是否是逆向超级素数
if(IsSuprime((i)))
{
//打印所有素数
printf("%d ",i);
//个数+1
numberOfSuperprime++;
}
}
}
printf(" 逆向超级素数的个数为%d",numberOfSuperprime);
return 0;
}