您的位置:首页 > 其它

蓝桥杯:求一个5位数的最大循环素数和 回文素数

2017-04-04 22:07 239 查看
1193是个素数,对它循环移位后发现:1931,9311,3119也都是素数,这样特征的数叫:循环素数。

你能找出具有这样特征的5位数的循环素数吗?当然,这样的数字可能有很多,请写出其中最大的一个。

#include<stdio.h>

#include<math.h>

int isshushu(int n)

{

 int flag=1;

 for(int i=2;i<=sqrt(n);i++)

 {

  if(n%i==0)

   flag=0;

 }

 return flag;

}

int yiwei(int n)

{

 int a=n%10;

 int b=n/10;

 return a*10000+b;

}

main()

//思路:对每个i做5次素数和移位判断

{

 for(long i=10000;i<=99999;i++)

 { 

 int temp=i;

 int cnt=0;

 for(int j=1;j<=5;j++)

  {

  if(isshushu(temp)) //判断是不是素数

   {

   cnt++;

    temp=yiwei(temp);//移动位置,还有种算法可以颠倒1234-4321   t=t*10+num%10;

    }

   }

   if(cnt==5)

   {

    printf("%d\n",i);

   }

  }

 return 0;

 }

答案:99371

回文数:

10301是个5位的素数。它有个特点,把数字倒过来还是它本身,具有这样特征的素数,我们称之为:回文素数。

10501

10601

11311
这些都是5位的回文素数。
请你计算一下,像这样的5位数的回文素数,一共有多少个?
请填写这个表示个数的整数,注意不要写任何其它多余的内容,比如说明或解释文字,也不要列出所有的回文素数。

#include<stdio.h>

#include<math.h>

int isshushu(int n)

{

 int flag=1;

 for(int i=2;i<=sqrt(n);i++)

 {

  if(n%i==0)

  flag=0;

  } 

 return flag;

 

}

int huiwen(int n)

{

 int t=0;

 while(n!=0)

 {

  t=t*10+n%10;//12534->43521

  n=n/10; 

 }

 return t;

}

main()

{

 int cnt=0;

 for(long i=10000;i<=99999;i++)

 {

  int temp=i;

  if(isshushu(temp))

  {

    int temp1=huiwen(temp);

    if(temp1==temp)

    {

     cnt++;

     printf("%d\n",temp1);

    }

  }

 }

 printf("%d",cnt);

 return 0;

}

方法二:

#include<stdio.h>

#include<math.h>

int isshushu(int n)

{

 int flag=1;

 for(int i=2;i<=sqrt(n);i++)

 {

  if(n%i==0)

  flag=0;

  } 

 return flag;

}

main()

{

 int cnt=0;

for(int a=0;a<=9;a++)

{

 for(int b=0;b<=9;b++)

 { 

 

 for(int c=0;c<=9;c++)

 {

 int num=a*10000+b*1000+c*100+b*10+a;

   if(isshushu(num)&&num!=0)

   {

    printf("%d\n",num);

    cnt++;

   }

  }

  

 }

 }

printf("%d",cnt);

 return 0;

}

方法三:

五重循环;如果第一位和最后一位,第二位和倒数第二位相等,再判断是不是素数

答案:93
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: