问题 3807 --金蝉素数(完善程序)

3807: 金蝉素数(完善程序)★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 194  解决: 103
[提交][状态][命题人:]

题目描述

某古寺的一块石碑上依稀刻有一些三位与四位的神秘自然数。

专家研究发现:这些数是素数,且从低位去掉一位,或两位......后都仍为素数,

从高位去掉一位,或两位...后也都仍为素数,

更奇妙的是,同时去掉它的最高位与最低位数字后还是素数。

因此,人们把这些神秘的素数称为金蝉素数,喻意金蝉脱壳之后仍为美丽的金蝉。 

试求出石碑上的金蝉素数。

#include<iostream>
#include<cmath>
using namespace std;
int a[401];
int main()
{
    a[1]=2,a[2]=3,a[3]=5,a[4]=7;
    int u=4;
    for(int i=11;i<10000;i+=2)
	{
        int x=3;
        while(x*x<=i&&____(1)_____) x++;
        if(x*x<=i) continue;
        if(a[u]<1000) a[++u]=i; //i是素数
        if(i<=100) continue; //三位及以上才行
        int L=log(i)/log(10)+1; //i的位数
        int t=1,s=0;
 	for(int j=1;j<L;j++) 
	{
            t*=10; 
            int hi=____(2)______;   //高j位*******
            int lo=____(3)______;   //低L一j位*******
            int v=1,mid=10000;
            if(j==L-1)mid=lo/10;//去首去尾的中间部分
            while(a[v]<=hi || a[v]<=lo) 
	    {
                if(a[v]==hi) s++;
                if(a[v]==lo) s++;
                if(a[v]==mid) s++;
                ______(4)_____;
             }
         }
         if(_____(5)______) cout<<i<<endl;
    }
    return 0;
}

输入

输出

输出所有满足要求的数

提示

来源

[提交][状态]