1193是个素数,对它循环移位后发现:1931,9311,3119也都是素数,这样特征的数叫:循环素数。
你能找出具有这样特征的5位数的循环素数吗?当然,这样的数字可能有很多,请写出其中最大的一个。
你能找出具有这样特征的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]; //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;
}