2885 - 金蝉素数
某古寺的一块石碑上依稀刻有一些三位与四位的神秘自然数。专家研究发现:这些数是素数,且从低位去掉一位或两位,……后都仍为素数,从高位去一位或两位,……后也都仍为素数,更奇妙的是同时去掉它的最高位与最低位数字后还是素数。因此,人们把这些神秘的素数称为金蝉素数,喻意为金蝉脱壳之后仍为美丽的金蝉。
现给出一个数n,找出n以内的金蝉素数。如果没有则输出"No"
Input
一行:整数n (100<n<9999)
Output
若干行,每行一个金蝉素数
Examples
Input
500
Output
373
Solution 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; } }