蓝桥杯第六届 5位数的循环素数

来源:互联网 发布:c语言常用英语单词 编辑:程序博客网 时间:2024/05/20 16:43
1193是个素数,对它循环移位后发现:1931,9311,3119也都是素数,这样特征的数叫:循环素数。

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

注意:答案是个5位数,不要填写任何多余的内容。


两段代码都能AC
#include<stdio.h>#include<math.h>int isPrime(int n){int flag=1;for(int i=2;i<=sqrt(n);i++){if(n%i==0){flag=0;break;}}return flag;} int circle(int n){int a=n%10;int b=n/10;return a*10000+b;}int main(){int i,j,count,temp;for(i=99999;i>=10000;i--){temp=i;count=0;for(j=0;j<5;j++){if(isPrime(temp)){count++;temp=circle(temp);}}if(count==5){printf("%d\n",i);break;}}return 0;}

#include<stdio.h>int map[6]={0};int num[4]={1,3,7,9};int ans=0;long  a1,a2,a3,a4,a6,a5,a7;long sum=0;long index=1;long  data[1024];//返回0不是素数,返回1是素数 int  checksushu(int n){for(int i=2;i<n/2;i++)  if(n%i==0)    return 0;return 1;}//筛选素数 void check(){int temp=map[1]*10000+map[2]*1000+map[3]*100+map[4]*10+map[5];if(checksushu(temp)){   data[index]=temp;//    printf("%d: %d\n",index,data[index]);   index++;}}//同过排列组合 1,3,7,9  共1024种组合。 void dfs(int n){if(n==6){check();return;}for(int i=0;i<4;i++){map[n]=num[i];dfs(n+1);}}//移位查找  是否是素数。从大到小。满足条件则输出 void find(){for(int i=index-1;i>0;i--){ long a1=data[i];   //56789long a2=a1%10*10000+a1/10;//90000+5678=95678long a3=a2%10*10000+a2/10;long a4=a3%10*10000+a3/10;long a5=a4%10*10000+a4/10;long a6=a5%10*10000+a5/10;int t=0;//printf("%d:%d %d %d %d %d \n",i, data[i],a2,a3,a4,a5);for(int j=0;j<index;j++){if(data[j]==a2) t++;if(data[j]==a3) t++;if(data[j]==a4) t++;if(data[j]==a5) t++;}if(t==4) { printf("%d  \n", data[i]); return ; }}}int main(){dfs(1);find();return 0;}




2 0
原创粉丝点击