快速幂算法及矩阵快速幂
来源:互联网 发布:巨灵数据 金融界 编辑:程序博客网 时间:2024/05/18 01:17
Description
给定三个数A, B, K, 求 A的B次方除以K的余数 。
Input
输入只有一行,为三个正整数A(1 <= A <= 2000000000), B(1 <= B <= 2000000000), K(1 <= K <= 10000)。
Output
一个整数,(A ^ B) % K 的值。
Sample Input
11 100 7
Sample Output
给定三个数A, B, K, 求 A的B次方除以K的余数 。
Input
输入只有一行,为三个正整数A(1 <= A <= 2000000000), B(1 <= B <= 2000000000), K(1 <= K <= 10000)。
Output
一个整数,(A ^ B) % K 的值。
Sample Input
11 100 7
Sample Output
4
#include<iostream>using namespace std;int main(){long long a,b;int k,i,j,s=1;cin>>a;cin>>b;cin>>k;a=a%k;while(b){if(b%2==1)s=(s*a)%k;b=b/2;a=(a*a)%k; }cout<<s<<endl;return 0;}以下为a^b快速幂算法模板
int s=1,a,b; cin>>a>>b;while(b){if(b%2==1)<span style="white-space:pre"></span>s=s*a;b=b/2;a=a*a; }cout<<s<<endl;
使用矩阵快速幂算法求斐波那契数列
Description
In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F
Input
a single line containing n (where 0 ≤ n ≤ 100,000,000,000)
Output
print Fn mod 1000000007 in a single line.
Sample Input
99999999999
Sample Output
669753982
Hint
An alternative formula for the Fibonacci sequence is
As a reminder, matrix multiplication is associative, and the product of two 2 × 2 matrices is given by
Also, note that raising any 2 × 2 matrix to the 0th power gives the identity matrix:
As a reminder, matrix multiplication is associative, and the product of two 2 × 2 matrices is given by
Also, note that raising any 2 × 2 matrix to the 0th power gives the identity matrix:
AC代码//矩阵快速幂模模板
#include<iostream>#include<cstring>#include<cstdlib>using namespace std;long long a[3][3]={{0,0,0},{0,1,1},{0,1,0}};long long t[3][3]={{0,0,0},{0,0,0},{0,0,0}};//相当于temp,替换作用long long s[3][3]={{0,0,0},{0,1,0},{0,0,1}};//初始为单位矩阵int main(){int k,i,j;long long n,b;cin>>n;b=n;while(b){if(b%2==1){ memset(t,0,sizeof(t));for(i=1;i<=2;i++)for(j=1;j<=2;j++) for(k=1;k<=2;k++) t[i][j]=(t[i][j]+(s[i][k]*a[k][j])%1000000007)%1000000007;//t=s*afor(i=1;i<=2;i++)for(j=1;j<=2;j++)s[i][j]=t[i][j];//s=t;}b=b/2;memset(t,0,sizeof(t));for(i=1;i<=2;i++)for(j=1;j<=2;j++)for(k=1;k<=2;k++)t[i][j]=(t[i][j]+(a[i][k]*a[k][j])%1000000007)%1000000007;//t=a*a;for(i=1;i<=2;i++)for(j=1;j<=2;j++)a[i][j]=t[i][j];//a=t;}cout<<s[1][2]<<endl;return 0;}
Problem Description
Now, have a break, I, Jason, am tired of making the problem.
Let us solve a math problem.
F[1] = 1;
F[2] = 1;
F[n] = (A * F[n - 1] + B * F[n - 2]) mod 1000000007
Given A, B, and n, you are to calculate the value of F[n].
Input
The input consists of multiple test cases. Each test case contains three
integers A, B and n on a single line (1<=A,B<=1000,1<=n<=100000000).
Three zeros signal the end of input and this test case is not to be
processed.
Output
For each test case, print the value of F[n] on a single line.
Sample Input
1 1 3
1 2 10
0 0 0
Sample Output
2
341
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<set>#include<algorithm>#include<sstream>#define LL long longusing namespace std;const int MAX=1000000007;LL a[2][2];LL t[2][2];int main(){ LL x; while(cin>>x) { LL y,n; cin>>y>>n; if(x==0&&y==0&&n==0) return 0; LL b=n-2; LL s[2][2]={{1,0},{0,1}}; a[0][0]=x; a[0][1]=y; a[1][0]=1; a[1][1]=0; while(b) { if(b%2==1) { memset(t,0,sizeof(t)); for(int i=0;i<=1;i++) for(int j=0;j<=1;j++) for(int k=0;k<=1;k++) t[i][j]=(t[i][j]+s[i][k]*a[k][j])%MAX; for(int i=0;i<=1;i++) for(int j=0;j<=1;j++) s[i][j]=t[i][j]; } b=b/2; memset(t,0,sizeof(t)); for(int i=0;i<=1;i++) for(int j=0;j<=1;j++) for(int k=0;k<=1;k++) t[i][j]=(t[i][j]+a[i][k]*a[k][j])%MAX; for(int i=0;i<=1;i++) for(int j=0;j<=1;j++) a[i][j]=t[i][j]; } cout<<(s[0][0]+s[0][1])%MAX<<endl; } return 0;}
1 0
- 快速幂算法及矩阵快速幂
- 矩阵快速幂算法
- 快速幂及矩阵
- 模板--快速幂及矩阵快速幂
- 【算法】矩阵快速求幂
- 快速矩阵幂乘算法
- 矩阵快速幂 算法模板
- 快速矩阵快速幂
- 整数快速乘法/快速幂+矩阵快速幂+Strassen算法
- 矩阵运算及 快速幂求矩阵
- 快速幂||矩阵快速幂
- 快速幂&矩阵快速幂
- 快速幂,矩阵快速幂
- 快速幂 矩阵快速幂
- 快速幂&矩阵快速幂
- 【快速幂】【矩阵快速幂】
- 快速幂和快速矩阵
- 快速乘/快速幂/矩阵快速幂
- Cannot change version of project facet Dynamic web module to 3.0 解决方案
- join,yield等关键字的使用
- Python开发环境安装和配置
- nodejs学习
- 总结
- 快速幂算法及矩阵快速幂
- Java与数据库数据类型对应表
- POJ 3164 Command Network 最小树形图
- #include<fcntl.h>
- Familial groups in social networks
- HDU 3873 Invade the Mars dijkstra最短路
- ER图与UML图
- PAT 1007
- const