UVA10236 斐波那契素数

题意:任取斐波那契数列中一项f[i],若对于所有j
解法:这题的理论分析在黑书上有,结论是从第五项开始下标为素数的斐波那契数都是斐波那契素数

#include <stdio.h>
#include <string.h>
const int MAXN = 250010;;
int prime[25010];
bool isprime[MAXN];
long double fib[MAXN];
int main(){
	int i, j;
	for(i=0; i<MAXN; i++)
		isprime[i] = true;
	for(i=2; i<=500; i++){
		for(j=i*i; j<=MAXN; j+=i)
			isprime[j] = false;
	}
	int idx = 1;
	for(i=2; i<=MAXN; i++){
		if(isprime[i])
			prime[idx++] = i;
	}
	prime[1] = 3;
	prime[2] = 4;
	fib[0] = fib[1] = 1;
	bool flag = false;
	for(i=2; i<=MAXN; i++){
		if(flag){
			fib[i] = fib[i-1] + fib[i-2]/10;
			flag = 0;
		}
		else {
			fib[i] = fib[i-1] + fib[i-2];
		}
		if(fib[i]>1e9){
			fib[i]/=10;
			flag = true;
		}
	}
	int n;
	while(scanf("%d", &n)!=EOF)
		printf("%d\n", (int)fib[prime[n]-1]);
}
时间: 2024-09-26 23:29:56

UVA10236&#160;斐波那契素数的相关文章

UVa 10236 The Fibonacci Primes:斐波那契素数

10236 - The Fibonacci Primes Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1177 注意此题的描述和维基百科上Fibonacci Prime的描述不同. 上面加着重符的文字说明:可以用类似素数筛的方式筛出Fibonacci Pr

hdu 4549 M斐波那契数列

click here ~~ Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的值吗? Input 输入包含多组测试数据: 每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 ) Output 对每组测试数据请输出一个整数F[n],由于F[n]可能很大,你只需输出F[n

HDU 3977 求斐波那契循环节

题意:求斐波那契数列模一个数的循环节的长度. 分析过程:首先我们知道fib数列模p如果出现了连续的1,0就意味这着开始循环了,因为接下来的项就是1 1 2 3 5等等. 那么很显然如果在第k位第一次出现了1,0,那么对于以后的1,0都可以表示为k*m.   那么,现在我们考虑如果fib数列模p在第pos位第一次出现了0,那么设0前面的那个数为a,则接下来的序列将是a,0,a, a,2a,3a,5a,8a,.....可以看出a的系数就是一个fib数列,那么我们就可以得到fib(k+i)%p=a*f

HDU 3978 斐波那契循环节

题意:给出f(f(f...f(n)...)) 总共嵌套k次.问最后模p的值是多少. 首先应该明白的是这个题有循环节的.一个数模N的循环节就是这个数分解成素因子乘积的形式p1^a1*p2^a2*p3^a3...后,斐波那契模pi^ai的循环节的最大公约数. 那么一个素数的k次幂的循环节=斐波那契模上这个素数的循环节乘上p^(k-1). 而一个素数p的循环节 如果p>5并且是5的二次剩余,那么循环节就是(p-1)的因子,否则就是2*(p+1)的因子.所以2 3 5 的时候需要特判一下. 知道这些就能

UVa 10183 How Many Fibs? (统计斐波那契数个数&amp;amp;高精度)

10183 - How Many Fibs? Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=115&page=show_problem&problem=1124 Recall the definition of the Fibonacci numbers:    f1 := 1    f2 := 2    fn :

用PHP迭代器来实现一个斐波纳契数列

斐波纳契数列通常做法是用递归实现,当然还有其它的方法.这里现学现卖,用PHP的迭代器来实现一个斐波纳契数列,几乎没有什么难度,只是把类里的next()方法重写了一次.注释已经写到代码中,也是相当好理解的. <?php /* *@author nicesunboy@gmail.com */ class Fibonacci implements Iterator { private $previous = 1; private $current = 0; private $key = 0; publ

输出斐波那契数列的算法

斐波那契数列(Fibonacci polynomial),又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.-- 要求编程输出这样的一组数,比如输出10个数的序列 /** * @param i 第n个数 * @param j 第n+1个数 * @param n 输出个数 */ public static void ff( int i,int j,int n){ int m=1; System.out.print(i+","); while(m++<n)

UVa 10229 Modular Fibonacci:矩阵快速幂求斐波那契

10229 - Modular Fibonacci Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=115&page=show_problem&problem=1170 The Fibonacci numbers (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...) are defin

打印菱形以及斐波纳契数列的几种解法介绍

1.编写程序,打印*菱形推出第i行要打印的空白个数及*号个数,用for循环依次打印各行 复制代码 代码如下: #include<stdio.h> //总共要打印2*n-1行,逐行打印 void print1(int n) { int i,j; for(i=1;i<=n;i++){//打印1至n行 for(j=1;j<=n-i;j++)//打印n-i个空格 printf(" "); for(j=1;j<=2*i-1;j++)//打印2*i-1个*号 prin