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位的素数。它有个特点,把数字倒过来还是它本身,具有这样特征的素数,我们称之为:回文素数。
10601
11311
#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