hdu4549——M斐波那契数列(费马小定理+矩阵快速幂)
来源:互联网 发布:上海开淘宝店培训 编辑:程序博客网 时间:2024/05/08 12:10
Problem Description
M斐波那契数列F[n]是一种整数数列,它的定义如下:
F[0] = a
F[1] = b
F[n] = F[n-1] * F[n-2] ( n > 1 )
现在给出a, b, n,你能求出F[n]的值吗?
Input
输入包含多组测试数据;
每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 )
Output
对每组测试数据请输出一个整数F[n],由于F[n]可能很大,你只需输出F[n]对1000000007取模后的值即可,每组数据输出一行。
Sample Input
0 1 0
6 10 2
Sample Output
0
60
可以推出f(n)=a^fib(n-1)*b^fib(n),n>=2
然后根据费马小定理a^n = a^( n%(p-1) )求得
所以要先求出用矩阵快速幂求出fib数列,再用快速幂求a^n,最后乘起来就行了
#include <iostream>#include <cstring>#include <string>#include <vector>#include <queue>#include <cstdio>#include <set>#include <math.h>#include <algorithm>#include <queue>#include <iomanip>#define INF 0x3f3f3f3f#define MAXN 10000005#define Mod 1000000007using namespace std;const int N = 2;long long m,n;struct Matrix{ long long mat[N][N];};Matrix mul(Matrix a,Matrix b){ Matrix res; for(int i=0; i<2; ++i) for(int j=0; j<2; ++j) { res.mat[i][j]=0; for(int k=0; k<2; ++k) { res.mat[i][j]+=a.mat[i][k]*b.mat[k][j]; res.mat[i][j]%=(Mod-1); } } return res;}Matrix pow_matrix(Matrix a,long long k){ Matrix res; memset(res.mat,0,sizeof(res.mat)); for(int i=0; i<2; ++i) res.mat[i][i]=1; while(k) { if(k%2) res=mul(res,a); a=mul(a,a); k>>=1; } return res;}long long pow_mod(long long a,long long k){ long long res=1; while(k) { if(k%2) res=(res*a)%Mod; a=(a*a)%Mod; k>>=1; } return res;}int main(){ Matrix tmp; long long a,b; while(~scanf("%I64d%I64d%I64d",&a,&b,&n)) { memset(tmp.mat,0,sizeof(tmp.mat)); tmp.mat[0][0]=tmp.mat[1][0]=tmp.mat[0][1]=1; if(n==0) { printf("%I64d\n",a); continue; } Matrix p=pow_matrix(tmp,n-1); long long ans; ans=(pow_mod(a,p.mat[1][0])*pow_mod(b,p.mat[0][0]))%Mod; printf("%I64d\n",ans); } return 0;}
0 0
- hdu4549——M斐波那契数列(费马小定理+矩阵快速幂)
- hdu4549 M斐波那契数列 (矩阵快速幂+费马小定理)
- hdu4549 M斐波那契数列(矩阵快速幂)
- HDU4549 M斐波那契数列【矩阵快速幂】
- 解题报告:HDU4549 M斐波那契数列 数论三大基础(快速幂+矩阵快速幂+费马小定理)
- M斐波那契数列(hdu4549矩阵二分幂+二分快速幂)
- HDU——4549M斐波那契数列(矩阵快速幂+快速幂+费马小定理)
- hdu4549---M斐波那契数列(矩阵+欧拉定理)
- hdu4549 M斐波那契数列 【矩阵快速幂+快速幂+欧拉函数降次】
- hdoj 4549 M斐波那契数列(费马小定理降幂,矩阵快速幂)
- HDU 4549 M斐波那契数列(矩阵快速幂)(费马小定理)
- HDOJ 题目4549 M斐波那契数列(数学,矩阵快速幂,费马小定理)
- HDU - 4549 M斐波那契数列(矩阵快速幂+费马小定理)
- M斐波那契数列(矩阵快速幂+费马小定理)
- HDU 4549 M斐波那契数列(矩阵快速幂3)+费马小定理
- HDU 4549 M斐波那契数列(矩阵快速幂+费马小定理)
- HDU 4549 M斐波那契数列 (矩阵快速幂+费马小定理)
- hdu 4549 M斐波那契数列(费马小定理+矩阵快速幂)
- SSL2294 打包(dp)
- android 添加背景音乐,按键音
- 如何用U盘安装CENTOS6.5以上系统
- hdu2018 母牛的故事(模拟)
- First & Follow 集
- hdu4549——M斐波那契数列(费马小定理+矩阵快速幂)
- 人生如戏
- CCFCSP201609-1最大波动
- 维吉尼亚加密解密
- 文章标题 大数加法
- JCP和JSR. 以及工作中碰到的一些JSR
- Android 百分比布局
- 如果你已经这样了,那你必须要跳槽了。
- STM32 CAN 过滤器、滤波屏蔽器配置总结