UVa 10236 - The Fibonacci Primes(斐波那契素数)

斐波那契素数定理:

斐波那契数列中,若i为素数(i>5),则fib(i)为素数

筛出22000个素数,得需要遍历到250000,本题要求保留前10位,用double存储斐波那契数列即可

附:

#include 
#include 
#include 
bool isprime[250010];
int prime[25010];
long double fib[250010];
int main()
{
    memset(isprime,0,sizeof(isprime));
    for(int i=2; i<=500; i++)
    {
        for(int j=i*i; j<=250000; j+=i)
            isprime[j]=1;
    }
    int p=1;
    for(int i=2; i<=250000; i++)
    {
        if(!isprime[i])
        {
            prime[p++]=i;
        }
    }
    prime[1]=3;
    prime[2]=4;
    memset(fib,0,sizeof(fib));
    fib[0]=fib[1]=1;
    int flag=0;
    for(int i=2; i<=250000; i++)
    {
        if(flag==1){fib[i]=fib[i-1]+fib[i-2]/10;flag=0;}
        else {fib[i]=fib[i-1]+fib[i-2];flag=0;}
        if(fib[i]>1e9){fib[i]/=10;flag=1;}
    }
    int n;
    while(scanf("%d",&n)==1)
    {
        printf("%d\n",(int)fib[prime[n]-1]);
    }
    return 0;
}


你可能感兴趣的:(数论+组合数学)