`
wss71104307
  • 浏览: 224389 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

1019 Fibonacci II

阅读更多

前段时间忙这考试,快考完了,继续坚持。

http://acm.nit.net.cn/showproblem.jsp?pid=1019

Fib问题,矩阵解法。注意数据范围

 

#include <stdio.h>

#define NTYPE long long
#define MTYPE int
const int A[2][2] = {{1, 1},
					 {1, 0}};

int main()
{
	MTYPE m;
	NTYPE n;
	while(scanf("%lld %d", &n, &m) != EOF)
	{
		printf("%d\n", Fib(n, m));
	}
	return 0;
}

void A_power(int result[][2], NTYPE n, MTYPE m)
{

	int temp[2][2]={{1, 1},
		 {1, 0}};
	int ttemp[2][2];
	int result_temp[2][2]={{1, 1},
			 {1, 0}};

	while(n)
	{
		if(n & 1)
		{
			result_temp[0][0] = result[0][0] * temp [0][0] + result[0][1] * temp [1][0];
			result_temp[0][1] = result[0][0] * temp [0][1] + result[0][1] * temp [1][1];
			result_temp[1][0] = result[1][0] * temp [0][0] + result[1][1] * temp [1][0];
			result_temp[1][1] = result[1][0] * temp [0][1] + result[1][1] * temp [1][1];

			result[0][0] = result_temp[0][0]%m;
			result[0][1] = result_temp[0][1]%m;
			result[1][0] = result_temp[1][0]%m;
			result[1][1] = result_temp[1][1]%m;
		}


		ttemp[0][0] = temp[0][0] * temp [0][0] + temp [0][1] * temp [1][0];
		ttemp[0][1] = temp[0][0] * temp [0][1] + temp [0][1] * temp [1][1];
		ttemp[1][0] = temp[1][0] * temp [0][0] + temp [1][1] * temp [1][0];
		ttemp[1][1] = temp[1][0] * temp [0][1] + temp [1][1] * temp [1][1];

		temp[0][0] = ttemp[0][0]%m;
		temp[0][1] = ttemp[0][1]%m;
		temp[1][0] = ttemp[1][0]%m;
		temp[1][1] = ttemp[1][1]%m;


		n >>= 1;
	}
}

int Fib(NTYPE n, MTYPE m)
{
	int result[2][2]={{1, 1},
			 {1, 0}};
	if( n >= 2)
	{
		A_power(result, n-2, m);

	}
	return result[0][0] % m;

}
 
分享到:
评论

相关推荐

    Fibonacci(斐波那契)数列的JAVA解法

    该序列以意大利数学家 Leonardo Fibonacci 的名字命名,故称为斐波那契数列。该序列的特点是每个数字都是前两个数字的和,以此模式无限延续下去。 下面是斐波那契数列的JAVA解法,包括递归算法、循环算法、数组保存...

    斐波那契数(fibonacci汇编程序)

    ### 斐波那契数(Fibonacci)及其汇编程序实现 #### 一、斐波那契数列概述 斐波那契数列是由意大利数学家列奥纳多·斐波那契(Leonardo Pisano Fibonacci)在13世纪提出的一种数列,其特点是每个数都是前两个数的...

    fibonacci_Fibonacci_MT4斐波那契回调指标_

    在提供的压缩包文件“fibonacci”中,可能包含了与斐波那契回调指标相关的MT4插件、用户手册或示例图表,供交易者学习和使用。通过深入理解并熟练运用这个工具,交易者可以更好地理解和预测市场动态,提高交易决策的...

    斐波那契堆(fibonacci)

    2. 删除最小元素:斐波那契堆通过“瀑布修剪”(Fibonacci Heap Deletion)策略来优化这个操作。当删除最小元素时,会将所有与其相邻的子节点提升到其位置,这个过程可能引发树的重构,但总体上保证了操作的时间...

    用Python实现斐波那契(Fibonacci)函数

    Fibonacci斐波那契数列,很简单,就是一个递归嘛,学任何编程语言可能都会做一下这个。 最近在玩Python,在粗略的看了一下Learning Python和Core Python之后,偶然发现网上有个帖子Python程序员的进化写的很有意思。...

    Fibonacci数列斐波那契数列PPT学习教案.pptx

    "Fibonacci数列斐波那契数列PPT学习教案.pptx" Fibonacci数列是一种非常重要的数学概念,它的应用非常广泛,包括生物学、经济学、计算机科学等领域。下面我们将详细介绍Fibonacci数列的概念、性质和应用。 1. ...

    斐波那契(Fibonacci)数列计算器设计.zip

    要求使用合适的逻辑电路的设计方法,通过工具软件 logisim 进行斐波那契(Fibonacci)数列计算器设计和验证,记录实验结果,验证设计是否达到要求。 通过斐波那契(Fibonacci)数列计算器的设计、仿真、验证 3 个训练...

    Fibonacci:程序取一个整数,并打印出斐波那契数列的那一项

    如果你想要在控制台打印斐波那契数列的特定项,可以调用这个函数并传入所需的索引,例如`print(fibonacci(10))`会打印出第10项斐波那契数,即55。 在实际编程中,除了这种方法,还可以使用递归、动态规划或矩阵乘法...

    MT4斐波那契指标修改版源码,Fibonacci++Modified+指标完整源码.zip

    这个源代码是Fibonacci++Modified指标的完整实现,旨在帮助交易者利用斐波那契数列的原理来绘制图表上的斐波那契水平线,以辅助决策。斐波那契数列在金融市场上被广泛用于识别潜在的价格反转点或支撑与阻力位,因为...

    Fibonacci_VERILOGfibonacci_实现斐波拉切数列_

    斐波那契数列是一种经典的数学序列,定义如下:序列中的第一个数字是0,第二个数字是1,之后的每一个数字都是前两个数字之和。斐波那契数列的前几个数字是0, 1, 1, 2, 3, 5, 8, 13...。在计算机科学中,特别是硬件...

    斐波那契_logisim斐波那契_斐波那契logisim_planningv89_

    斐波那契数列是一种经典的数学序列,它的定义基于简单的递归关系,即每个数是前两个数的和。在给定的标题和描述中,我们聚焦于如何使用Logisim这一逻辑电路设计软件来实现斐波那契数列的计算。Logisim是一款教育用途...

    斐波那契堆(Fibonacci Heap)

    斐波那契堆(Fibonacci Heap)是一种高级的数据结构,主要用于解决图的最短路径问题、优先队列等需要高效插入、删除和查找最小元素的操作。它由计算机科学家Michael L. Fredman和Robert E. Tarjan在1984年提出,其...

    算法-数论- 斐波那契数列(Fibonacci).rar

    这个数列由意大利数学家斐波那契(Leonardo Fibonacci)在13世纪引入,用于模拟兔子繁殖的问题,因此也被称为“兔子数列”。数列的定义非常简单:第一项是0,第二项是1,之后每一项都是前两项之和。用数学公式表示...

    Fibonacci数组_斐波那契数组_

    斐波那契数组,也被称为斐波那契序列矩阵(Fibonacci Sequence Matrix),是一种用于高效计算斐波那契数列的方法。斐波那契数列是一个数学上的数列,定义如下:序列的前两个数字是0和1,而之后的每一个数字都是前两...

    Fibonacci数多种算法

    斐波那契数列是一个非常经典的数学概念,它在计算机科学和算法设计中有着广泛的...在提供的压缩包文件"Fibonacci"中,可能包含了这些算法的实现代码,通过学习和比较它们,可以更好地理解和掌握各种算法的效率和特点。

    fibonacci(斐波那契)数序列.rkt

    fibonacci序数列,提供一个模块提供学习

    matlab 斐波那契法 代码

    matlab 斐波那契法 代码 运筹学作业编程实现

    利用Matlab程序计算斐波那契数列的前一百项

    在这个MATLAB程序中,我们首先定义了斐波那契数列的前两项`fibonacci = [1, 2]`,然后通过`for`循环从第三项开始计算,直到第一百项。在每次循环中,我们使用`fibonacci(k)`存储当前项,它是前两项`fibonacci(k-1)`...

    Java实现斐波那契数列(Fibonacci sequence)

    斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。java代码实现该数列

    fibonacci数列生成器

    斐波那契数列(Fibonacci sequence)是数学领域中的一个重要概念,它在计算机科学、算法设计、金融分析等多个领域都有广泛的应用。这个数列由0和1开始,后面的每一项数字都是前两项数字的和。用数学公式表示就是:F...

Global site tag (gtag.js) - Google Analytics