东大OJ-1040-Count-快速幂方法求解斐波那契-
Many ACM team name may be very funny,such as "Complier_Error","VVVVV".Oh,wait for a minute here.
Is it "W W"+"V",or "W"+"V V V",or something others we can treat as?There are several ways we can treat this name "VVVVV" (5 'V's),as
V V can be treat as a W.
For 5 'V's,our have 8 ways.They are:
V V V V V
V W W
W W V
V W V V
W V W
W V V V
V V W V
V V V W
The problem here is that for n 'V's,how many ways do we have to treat it?Because
the answer may be too large, you should output the answer module by p.(If
n is 0,then we have just one way.)
输入
There are multiple test cases. The first line of the input contains an integer
M, meaning the number of the test cases.
For each test cases, there are
two integers n
and p
in a single line.
You can assume that
0<=n<=2100000000,
0<p<=2009.
输出
For each test case, output the answer with case number in a single line.
样例输入
2 5 5 4 7
样例输出
3
#include<iostream> using namespace std; struct m{int a[2][2]; }; m mul(m a, m b,int p){ m c; int i, j,k; for (i = 0; i < 2;i++) for (j = 0; j < 2; j++) { c.a[i][j] = 0; for (k = 0; k < 2; k++) c.a[i][j] +=( (a.a[i][k] %p)* (b.a[j][k]%p))%p; c.a[i][j] %= p; } return c; } m go(m a, int n,int p){ if (n == 1)return a; m b = go(a, n / 2, p); m c = mul(b, b, p); if (n % 2 == 1)c = mul(c, a, p); return c; } int main(){ //freopen("in.txt", "r", stdin); int t; cin >> t; m a = { 0, 1, 1, 1 }; while (t-- > 0){ int n, p; cin >> n >> p; if (n == 0){ cout << 1 << endl; continue; } cout << go(a, n, p).a[1][1]<<endl; } return 0; }
东大OJ-1040-Count-快速幂方法求解斐波那契-的更多相关文章
- 使用并行的方法计算斐波那契数列 (Fibonacci)
更新:我的同事Terry告诉我有一种矩阵运算的方式计算斐波那契数列,更适于并行.他还提供了利用TBB的parallel_reduce模板计算斐波那契数列的代码(在TBB示例代码的基础上修改得来,比原始 ...
- 斐波那契数列-java编程:三种方法实现斐波那契数列
题目要求:编写程序在控制台输出斐波那契数列前20项,每输出5个数换行 斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 这个数列 ...
- 两种JS方法实现斐波那契数列
第一种方法:递归 function fibonacci(n){ if (n==0){ return 0; }else if (n==1){ return 1; } return fibonacci(n ...
- C# 4种方法计算斐波那契数列 Fibonacci
F1: 迭代法 最慢,复杂度最高 F2: 直接法 F3: 矩阵法 参考<算法之道(The Way of Algorithm)>第38页-魔鬼序列:斐波那契序列 F4: 通项公式法 由于公式 ...
- HDU 2855 斐波那契+矩阵快速幂
http://acm.hdu.edu.cn/showproblem.php?pid=2855 化简这个公式,多写出几组就会发现规律 d[n]=F[2*n] 后面的任务就是矩阵快速幂拍一个斐波那契模板出 ...
- HDU----(4549)M斐波那契数列(小费马引理+快速矩阵幂)
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- HDU 4549 M斐波那契数列(矩阵快速幂)
题目链接:M斐波那契数列 题意:$F[0]=a,F[1]=b,F[n]=F[n-1]*F[n-2]$.给定$a,b,n$,求$F[n]$. 题解:暴力打表后发现$ F[n]=a^{fib(n-1)} ...
- HDU 4549 M斐波那契数列(矩阵快速幂+费马小定理)
M斐波那契数列 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submi ...
- CodeForces 227E Anniversary (斐波那契的高妙性质+矩阵快速幂)
There are less than 60 years left till the 900-th birthday anniversary of a famous Italian mathemati ...
随机推荐
- 2------------NLPIR(ICTCLAS2016)分词系统添加用户词典功能
备注:win7 64位系统,netbeans编程 基本代码框架参见我的另一篇文章:NLPIR分词功能 代码实现: package cwordseg; import java.io.Unsupporte ...
- 从vmware下载到Linux环境下jdk和maven的安装
写在前面:个人总结,如有不对请指出 操作环境: 操作系统:window7 企业版 处理器:Intel Core i5-4200U CPU @ 1.6GHz 内存:8G 系统类型:64位操作系统 需要安 ...
- Ubuntu14.02.2下安装JDK并配置Jetty服务器
首先第一步先取得JDK的安装文件,由于我的系统是64位的,所以安装包是jdk-7u80-linux-x64.gz 上传到unbuntu服务器下 执行tar -xvf jdk-7u80-linux-x6 ...
- 周一干不干活-PHP+MySQLi
hi 本来是雄心壮志的要干活的,哪知天有不测,早上大阴天起不来,中午又回寝室折腾衣服(做女工啊,牛不牛)没睡午觉,这样的迷糊状态,怎么科研,写这个好了. 1.PHP的OOP编程 4.7 多态 --定义 ...
- dp88dp6最靠谱的网络赚钱方法
(本文非原创,转载自http://mt.sohu.com/20160131/n436463696.shtml) 1.卖产品 最靠谱的当然是自己卖产品,可以先去淘宝.阿里巴巴.百度找到一款你认为有前景的 ...
- Network Experiment Environment Construction
In order to provide an environment for network experiments in the future, I use VirutalBox to create ...
- POJ 1066 Treasure Hunt【线段相交】
思路:枚举四边墙的门的中点,与终点连成一条线段,判断与其相交的线段的个数.最小的加一即为答案. 我是傻逼,一个数组越界调了两个小时. #include<stdio.h> #include& ...
- 关于log4j的讨论
1.LoggersLoggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN < ...
- Ajax讲解
AJAX:即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 ...
- 适配ipone5
PROJECT和TARGETS都需要设置