欧拉计划003 可裁剪质数

题目

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;
}
发布了84 篇原创文章 · 获赞 9 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章