数位构造法判断回文素数

数据5—1e8
多组输入

#include<stdio.h>
#include<stdlib.h>
#include<stack>
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
int sushu(int n)
{
	double s=n;
	for(int i=2;i<=sqrt(s);i++)
	{
		if(n%i==0)
			return 0;
	}
	return 1;
}
void huiwen1(int x,int y)
{
	int a;
	for(a=2;a<10;a++)
	{
		if(sushu(a)==1&&a>=x&&a<=y)
			printf("%d\n",a);
	}
}
void huiwen3(int x,int y)
{
	int a[2],n;
	for(a[0]=1;a[0]<10;a[0]+=2)
	{
		for(a[1]=0;a[1]<10;a[1]++)
		{
			n=a[0]*101+a[1]*10;
			if(sushu(n)==1&&n>=x&&n<=y)
				printf("%d\n",n);
		}
	}
}
void huiwen5(int x,int y)
{
	int a[3],n;
	for(a[0]=1;a[0]<10;a[0]+=2)
	{
		for(a[1]=0;a[1]<10;a[1]++)
		{
			for(a[2]=0;a[2]<10;a[2]++)
			{
				n=a[0]*10001+a[1]*1010+a[2]*100;
				if(sushu(n)==1&&n>=x&&n<=y)
					printf("%d\n",n);
			}
		}
	}
}
void huiwen7(int x,int y)
{
	int a[4],n;
	for(a[0]=1;a[0]<10;a[0]+=2)
	{
		for(a[1]=0;a[1]<10;a[1]++)
		{
			for(a[2]=0;a[2]<10;a[2]++)
			{
				for(a[3]=0;a[3]<10;a[3]++)
				{
					n=a[0]*1000001+a[1]*100010+a[2]*10100+a[3]*1000;
					if(sushu(n)==1&&n>=x&&n<=y)
						printf("%d\n",n);
				}
			}
		}
	}
}
int main()
{
	int x,y;
	while(scanf("%d %d",&x,&y)!=EOF)
	{
	huiwen1(x,y);
	if(x<=11&&y>=11)
		printf("11\n");
	huiwen3(x,y);
	huiwen5(x,y);
	huiwen7(x,y);
	}
	return 0;
}

这里有几个默认的:

  • 素数一定不是偶数(除了2)
  • 偶数位数的回文素数只有11
  • 素数判断到sqrt(n)即可,可以自行百度
发布了37 篇原创文章 · 获赞 76 · 访问量 7445

猜你喜欢

转载自blog.csdn.net/weixin_45939019/article/details/104227429
今日推荐