題目
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;
}