uva 10236 - The Fibonacci Primes
2013-11-03 19:44
549 查看
题目连接:uva 10236 - The Fibonacci Primes
题目大意:在给出n,输出第n个为素数的斐波那契数,取数值的前9位数。
解题思路:原本想用打表的方式遍历斐波那契数,然后存在数组了,但是这样判断素数的函数就比较难写,要写成大数,后来看到一条定律,f
,如果n为素数,那么f
也为素数,所以只要照出素数然后访问斐波那契数列的下标就可以了。
题目大意:在给出n,输出第n个为素数的斐波那契数,取数值的前9位数。
解题思路:原本想用打表的方式遍历斐波那契数,然后存在数组了,但是这样判断素数的函数就比较难写,要写成大数,后来看到一条定律,f
,如果n为素数,那么f
也为素数,所以只要照出素数然后访问斐波那契数列的下标就可以了。
#include <stdio.h> #include <string.h> #include <math.h> const int MAX = pow(10, 9); const int N = 250005; int prime , cnt;; double f ; void makePrime(int n) { int vis ; cnt = 1; memset(vis, 0, sizeof(vis)); for (int i = 2; i * i < n; i++) { if (!vis[i]) { for (int j = 2 * i; j < n; j += i) vis[j] = 1; } } for (int i = 2; i < n; i++) if (!vis[i]) prime[cnt++] = i; } void init(int n) { int flag = 0; f[1] = f[2] = 1; for (int i = 3; i < n; i++) { f[i] = f[i - 1]; if (flag) f[i] += f[i - 2] / 10; else f[i] += f[i - 2]; flag = 0; while (f[i] >= MAX) { flag = 1; f[i] /= 10; } } } int main () { makePrime(N); init(N); int n; while (scanf("%d", &n) == 1) { if (n == 1) printf("2\n"); else if (n == 2) printf("3\n"); else printf("%d\n", (int)f[prime ]); } return 0; }
相关文章推荐
- UVa 10236 - The Fibonacci Primes(斐波那契素数)
- uva 10236 The Fibonacci Primes
- UVA 10236 The Fibonacci Primes
- UVA 10236 The Fibonacci Primes
- UVA 10236 The Fibonacci Primes
- UVa 10236 The Fibonacci Primes (斐波那契素数)
- UVA 10236 - The Fibonacci Primes(斐波那契素数)
- UVa10236 - The Fibonacci Primes
- The Fibonacci Primes
- UVA11300 Spreading the Wealth
- UVa 10878 - Decode the tape 解题报告
- UVa 10785 - The Mad Numerologist
- UVA 10562 - Undraw the Trees
- uva 101 The Blocks Problem(模拟)
- UVA - 11324 The Largest Clique 强连通缩点+记忆化dp
- uva 11928 - The Busy Dog(几何)
- 【Uva 11080】Place the Guards
- Uva 539 - The Settlers of Catan
- Uva - 10397 - Connect the Campus
- uva 10474 Where is the Marble? (这算是哪门子搜索啊。。)