Tuesday, May 3, 2011

10394 - Twin Primes


#include<iostream>
#include<cmath>
#define M 20000000
using namespace std;

bool prime[M];
unsigned long int twinprm[M];
int genprime();

int main()
{
    register unsigned long n;
    genprime();
    //freopen("in.txt","r",stdin);
    while(scanf("%ld",&n)==1)
        cout<<"("<<twinprm[n]<<", "<<twinprm[n]+2<<")\n";
    return 0;
}

int genprime()
{
    register unsigned long i,j,s=sqrt(M);
    for(i=2;i<M;i++)
        prime[i]=true;
    for(i=2;i<s;)
    {
        if(prime[i])
            for(j=i+i;j<M;j+=i)
                prime[j]=false;
        for(i++;!prime[i];i++);
    }
    j=1;
    for(i=2;i<M;i++)
        if(prime[i]&&prime[i+2])twinprm[j++]=i;
    return 0;
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.