nyoj 148 fibonacci数列(二)
来源:互联网 发布:淘宝店铺头像在线制作 编辑:程序博客网 时间:2024/04/28 00:06
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=148
矩阵快速幂入门题,身为连线代都没学过的渣渣,为了学矩阵快速幂,还得百度矩阵学习矩阵。。不过矩阵快速幂好强大,之前只知道快速幂取余,没想到过斐波那契数列还可以用快速幂来解。
矩阵快速幂最重要的是根据表达式找出矩阵,比如斐波那契数列为f(n)=f(n-1)+f(n-2) (n>=2)
[f(n) (n-1)]=[f(n-1) f(n-2)]*
类似于快速幂,由此可求出
代码:
#include<stdio.h>#include<string.h>int n;struct stu{ int m[2][2];} a,b; //定义矩阵stu multi(stu x,stu y) //矩阵的乘法{ stu temp; int i,j,k; for(i=0; i<2; i++) { for(j=0; j<2; j++) temp.m[i][j]=(x.m[i][0]*y.m[0][j]+x.m[i][1]*y.m[1][j])%10000; } return temp; //返回类型为结构体}int quick_mod(){ a.m[0][0]=a.m[1][1]=1; a.m[0][1]=a.m[1][0]=0; //初始化a为单位矩阵 b.m[0][0]=b.m[0][1]=b.m[1][0]=1; b.m[1][1]=0; // while(n) //快速求n次幂 { if(n&1) //若n为奇数 a=multi(a,b); // b=multi(b,b); //和快速幂原理相同 n>>=1; //n缩小为原来一半 } return a.m[0][1]; //返回值,注意此处不为a.m[0][0],a.m[0][0]为n+1对应的值,}int main(){ while(scanf("%d",&n)&&n!=EOF) { printf("%d\n",quick_mod()); }}
1 0
- nyoj 148 fibonacci数列(二)
- nyoj 148 fibonacci数列(二)
- NYOJ 148 fibonacci数列(二)
- nyoj-148-fibonacci数列(二)
- nyoj 148 fibonacci数列(二)
- nyoj 148 fibonacci数列(二)【矩阵】
- fibonacci数列(二) nyoj 数学
- NYOJ 题目148 fibonacci数列(二)(矩阵快速幂)
- nyoj 148 fibonacci数列(二) 【矩阵快速幂】
- nyoj fibonacci数列(二) 148 (矩阵快速幂模板)
- nyoj--148 fibonacci数列(二)(矩阵快速幂)
- NYOJ 148 fibonacci数列(二)【矩阵快速幂】
- nyoj 148 fibonacci数列(二)(矩阵快速幂)
- nyoj fibonacci数列(二) 矩阵乘法
- nyoj 301 递推求值 和 nyoj 148 fibonacci数列(二) 【矩阵】
- nyoj-1102-Fibonacci数列
- NYoj 1102 Fibonacci数列
- NYOJ Fibonacci数列(四)
- Cannot add or update a child row: a foreign key constraint fails (`tsproduct/product`, CONSTRAINT `F
- 关于while(geline(cin,s))语句执行解释
- 二叉树中所有节点的左右子树相互交换 递归与非递归程序
- 练习三 1003
- Android 中Textview字体加粗
- nyoj 148 fibonacci数列(二)
- Hadoop集群WordCount详解
- Mac下安装opencv-python
- 解决 U盘安装Centos后拔除U盘无法启动问题方法,重新建立引导分区
- 起泡法排序
- 常用小方法的整理(1)
- jQuery mobile 监听页面的各种生命周期
- 2 变量、常量、printf、scanf
- MTK Camera 开机启动流程