HDU(2855_矩阵的二分快速幂)
来源:互联网 发布:java接口安全设计 编辑:程序博客网 时间:2024/05/02 04:22
Fibonacci Check-up
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 900 Accepted Submission(s): 507
Problem Description
Every ALPC has his own alpc-number just like alpc12, alpc55, alpc62 etc.
As more and more fresh man join us. How to number them? And how to avoid their alpc-number conflicted?
Of course, we can number them one by one, but that’s too bored! So ALPCs use another method called Fibonacci Check-up in spite of collision.
First you should multiply all digit of your studying number to get a number n (maybe huge).
Then use Fibonacci Check-up!
Fibonacci sequence is well-known to everyone. People define Fibonacci sequence as follows: F(0) = 0, F(1) = 1. F(n) = F(n-1) + F(n-2), n>=2. It’s easy for us to calculate F(n) mod m.
But in this method we make the problem has more challenge. We calculate the formula , is the combination number. The answer mod m (the total number of alpc team members) is just your alpc-number.
As more and more fresh man join us. How to number them? And how to avoid their alpc-number conflicted?
Of course, we can number them one by one, but that’s too bored! So ALPCs use another method called Fibonacci Check-up in spite of collision.
First you should multiply all digit of your studying number to get a number n (maybe huge).
Then use Fibonacci Check-up!
Fibonacci sequence is well-known to everyone. People define Fibonacci sequence as follows: F(0) = 0, F(1) = 1. F(n) = F(n-1) + F(n-2), n>=2. It’s easy for us to calculate F(n) mod m.
But in this method we make the problem has more challenge. We calculate the formula , is the combination number. The answer mod m (the total number of alpc team members) is just your alpc-number.
Input
First line is the testcase T.
Following T lines, each line is two integers n, m ( 0<= n <= 10^9, 1 <= m <= 30000 )
Following T lines, each line is two integers n, m ( 0<= n <= 10^9, 1 <= m <= 30000 )
Output
Output the alpc-number.
Sample Input
21 300002 30000
Sample Output
13
Source
2009 Multi-University Training Contest 5 - Host by NUDT
Recommend
gaojie
这个如果能够推出答案当然就能求出数据,
但是难就难在你推不出来。。。
诶,这是真的有点困难。
贴出别人的推导过程:
贴出自己的代码:
#include <stdio.h>#include <string.h>#include <iostream>#include <string>using namespace std;int N, M;struct Matrix{int date[2][2];void setE(){for (int i = 0; i < 2; i++){for (int j = 0; j < 2; j++){date[i][j] = (i == j);}}}Matrix Mul(Matrix m){Matrix e;for (int i = 0; i < 2; i++){for (int j = 0; j < 2; j++){e.date[i][j] = 0;for (int k = 0; k < 2; k++){e.date[i][j] += (long long int)date[i][k] * m.date[k][j] % M;}e.date[i][j] %= M;}}return e;}}mat;Matrix quick_pow(Matrix m, int n){Matrix ans;ans.setE();while (n){if (n & 1){ans = ans.Mul(m);}m = m.Mul(m);n >>= 1;}return ans;}int main(){int T;while (scanf("%d", &T) != EOF){while (T--){scanf("%d%d", &N, &M);if (N == 0){printf("0\n");continue;}mat.date[0][0] = 0;mat.date[0][1] = 1;mat.date[1][0] = 1;mat.date[1][1] = 1;Matrix m = quick_pow(mat, 2 * N - 1);printf("%d\n", (m.date[0][0] + m.date[1][0]) % M);}}//system("pause");return 0;}
- HDU(2855_矩阵的二分快速幂)
- HDU-1005(矩阵二分快速幂)
- C(HDU-1588矩阵二分快速幂)
- HDU 4549 (费马小定理+矩阵快速幂+二分快速幂)
- 快速矩阵二分幂
- 矩阵二分快速幂
- hdu 2855 矩阵快速幂
- hdu 2855(矩阵快速幂)
- hdu 4549(矩阵优化递推,数论,二分快速幂)
- hdu 1588 (Fibonacci+二分+矩阵快速幂)
- 【HDU 1588】Gauss Fibonacci(矩阵快速幂+二分)
- HDU 2604_递推+矩阵快速幂
- 矩阵快速幂(二分)
- 矩阵PKU3233二分加矩阵快速幂
- HDU 1588-Gauss Fibonacci(矩阵快速幂+二分求矩阵和)
- HDU 1757 简单的矩阵快速幂
- HDU 2855(由递推式构造矩阵+矩阵快速幂)
- HDU 1588 Gauss Fibonacci(矩阵快速幂+二分求等比数列和)
- Oracle数据字典介绍与使用
- 系统调用的原理
- 初识Halcon
- QT在代码中正常使用中文
- cygwin完全安装步骤方法
- HDU(2855_矩阵的二分快速幂)
- Halcon简介
- 如何写自己的内存复制函数?
- <fmt:formatDate>标签
- 类的sizeof
- Halcon产品描述
- Linux环境的系统配置文件
- 开发者需知的10类工具
- C 将整数变成字符串