注意:答案是个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]; //56789 long a2=a1%10*10000+a1/10; //90000+5678=95678 long 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;}
新闻热点
疑难解答