UVa 10236 - The Fibonacci Primes

传送门

UVa 10236 - The Fibonacci Primes

题意

求第n个Fibonacci素数。

思路

参考了他人的题解。有这么一个公式

\[Fibonacci\\_prime[k] = Fibonacci[prime[k]]\]

先写一个程序,可以看出第22000个Fibonacci素数大概要到240000这么多项数。一开始我是用JAVA直接推出来,然后输出。可是BigInteger的数组开不到这么大( TДT)。

原来稍微处理一下就可以了。

因为只要前九位,所以只要大于$1e9$的时候除以10就行,然后前一项也要相应地对位。最后输出整数部分。

代码

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 250000;
const int MAX = 1e9;
 
double fibo[MAXN];
int prime[MAXN], vis[MAXN];
 
void Init()
{
    int k = 1;
    for (int i = 2; i < 500; i++)
        if (!vis[i])
        {
            for (int j = i * i; j < MAXN; j += i)
                vis[j] = 1;
        }
    for (int i = 2; i < MAXN; i++)
        if (!vis[i])
            prime[k++] = i;
    fibo[1] = fibo[2] = 1;
    int flag = 0;
    for (int i = 3; i < MAXN; i++)
    {
        fibo[i] = fibo[i - 1];
        if (flag)
            fibo[i] += fibo[i - 2] / 10;
        else
            fibo[i] += fibo[i - 2];
        flag = 0;
        while (fibo[i] >= MAX)
        {
            flag = 1;
            fibo[i] /= 10;
        }
    }
    prime[1] = 3, prime[2] = 4;
}
 
int main()
{
    //freopen("input.txt", "r", stdin);
    Init();
    int n;
    while (~scanf("%d", &n))
        printf("%d\n", (int)fibo[prime[n]]);
    return 0;
}

Powered by Jekyll and Theme by solid