首页 > 学院 > 开发设计 > 正文

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

2019-11-06 07:15:58
字体:
来源:转载
供稿:网友
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];   //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;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表