求逆向超级素数

一个素数(设为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("输出所有逆向超级素数:\n");

    int i;

    //求出【100,999】内的所有超级素数

    for(i = 100 ; i < 1000 ; i++)

    {

    //判断是否是素数

      if(IsPrime(i))

      {

          //如果是素数,判断是否是逆向超级素数

         if(IsSuprime((i)))

         {

             //打印所有素数

            printf("%d ",i);

            //个数+1

            numberOfSuperprime++;

         }

      }

    }

    printf("\n逆向超级素数的个数为%d",numberOfSuperprime);

    return 0;

}

posted @ 2014-05-04 14:13  菜小晨  阅读(970)  评论(0编辑  收藏  举报