斐波那契素数定理:
斐波那契数列中,若i为素数(i>5),则fib(i)为素数
筛出22000个素数,得需要遍历到250000,本题要求保留前10位,用double存储斐波那契数列即可
附:
#include <stdio.h>
#include <string.h>
#include <math.h>
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;
}