5位数的循环素数

来源:互联网 发布:徐州淘宝摄影imsu 编辑:程序博客网 时间:2024/05/09 18:08

1193是个素数,对它循环移位后发现:


1931,9311,3119也都是素数,这样特征的数叫:循环素数。


你能找出具有这样特征的5位数的循环素数吗?

当然,这样的数字可能有很多,请写出其中最大的一个。

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

#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;}return flag;}//移位 int shift(int n){int a=n%10;//12345  5*10000+1234 int b=n/10;return a*10000+b; } int main(){for(int i=99999;i>=10000;i--)//i 代表5位数 {int temp=i;int count=0;//j代表循环5次 for(int j=0;j<5;j++){if(isprime(temp)){count++;temp=shift(temp);}}if(count==5){printf("%d",i);break;}}return 0;}

解法二:移位后最后一位数不能是2,4,5,6,8,0,所以只能是1,3,7,9

#include<stdio.h>#include<math.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];//1024=4*4*4*4*4  排列组合 1,3,7,9  共1024种组合//返回0不是素数,返回1是素数  int  checkprime(int n){for(int i=2;i<sqrt(n);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(checkprime(temp)){   data[index]=temp;   index++;}}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;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;}



0 0
原创粉丝点击