题目
3797 这个数很有趣。它本身是质数,而且如果我们从左边不断地裁去数字,得到的仍然是质数:3797, 797, 97, 7。而且我们还可以从右向左裁剪:3797, 379, 37, 3,得到的仍然都是质数。 找出全部 11 个这样从左向右和从右向左都可以裁剪的质数。 注意:2, 3, 5 和 7 不被认为是可裁剪的质数。
解题思路
暴力暴力暴力!直接判断。
程序代码
#include <stdio.h>
#include <math.h>
#include <string.h>
#define N 1000010
int b[N];
void prime(int n)
{
int i,j,m;
for(i=1;i<=n;i++)
b[i]=1;
b[0]=b[1]=0;
m=(int)sqrt(n);
for(i=2;i<=m;i++)
if(b[i])
for(j=2*i;j<=n;j+=i)
b[j]=0;
}
int find(int n){
int k=1;
int m=n;
while(m>9){
m/=10;//printf("%d ",m);
k*=10;
if(!b[m])
return 0;
}
while(k>9){
n%=k;
k/=10;
if(!b[n])
return 0;
}
return 1;
}
int main()
{
int i;
prime(N);
for(i=10;i<N;i++)
if(b[i])
if(find(i))
printf("%d\n",i);
return 0;
}