歐拉計劃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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章