数学_线性筛法建立素数表(HDU_1262)

#include <stdio.h>
#include <string.h>

#define MAX    0x7fffffff
#define M    10000

bool isPrime[M+1];

void primeAdd()
{
    memset(isPrime,true,sizeof(isPrime));

    for(int i=2;i<=M/2;i++)    //i in[2,M/2]
    {
        if(isPrime[i])        //if i is prime than i*k k in[2,3....] is not prime
        {
            for(int j=i<<1;j<=M;j+=i)
            {
                isPrime[j]=false;
            }
        }
    }
}

void run()
{

}

int main(int argc, char *argv[])
{
    #ifdef __LOCAL
    freopen("in.txt","r",stdin);
    #endif

    primeAdd();

    int n,mid;
    while(scanf("%d",&n) != EOF)
    {
        mid = n/2;
        while(mid>=2)
        {
            if(isPrime[mid] && isPrime[n-mid])
            {
                printf("%d %d\n",mid,n-mid);
                break;
            }
            mid--;
        }
    }

    return 0;
}
原文地址:https://www.cnblogs.com/lk1993/p/3089908.html