2885 - 金蝉素数

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

某古寺的一块石碑上依稀刻有一些三位与四位的神秘自然数。专家研究发现:这些数是素数,且从低位去掉一位或两位,……后都仍为素数,从高位去一位或两位,……后也都仍为素数,更奇妙的是同时去掉它的最高位与最低位数字后还是素数。因此,人们把这些神秘的素数称为金蝉素数,喻意为金蝉脱壳之后仍为美丽的金蝉。
现给出一个数n,找出n以内的金蝉素数。如果没有则输出"No"

题目输入

一行:整数n (100<n<9999)

题目输出

若干行,每行一个金蝉素数

输入/输出样例

输入格式

500

输出格式

373

C++解答

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int a[1001];
int ss(int );
int main()
{
	int m,n=0;
	cin>>m;
	for(int i=100;i<=m;++i)
	{
		int k=0,w,l=i;
		do
	{   
		++k;
		w=l%10;
		l/=10;
		a[k]=w;
	}while(l!=0);
		if(ss(i)==0)
		{
			if(ss(((i-a[k]*pow(10,k-1))-a[1])/10)==0)
			{
				if(ss(i-a[k]*pow(10,k-1))==0&&ss(i-a[k]*pow(10,k-1)-a[k-1]*pow(10,k-2))==0)
				{
					if(ss((i-a[1])/10)==0&&ss((i-10*a[2]-a[1])/100)==0)
					{
						cout<<i;
						++n;
					}
				}
			}
		}
	}
	if(n==0)cout<<"No";
	return 0;
}
int ss(int a)
{
	if(a==1)return 1;
	else
	{
	int x=2;
	int b=floor(sqrt(a));
	while(x<=b&&(a%x!=0))
	++x;
	if(x>b)return 0;
	else return 1;
	}
}