hrbustOJ 1787 New Fibonacci Number (矩阵快速幂+欧拉公式降幂)
来源:互联网 发布:数据库第六版exercises 编辑:程序博客网 时间:2024/06/07 01:55
New Fibonacci NumberTime Limit: 1000 MSMemory Limit: 32768 KTotal Submit: 40(18 users)Total Accepted: 14(11 users)Rating: Special Judge: NoDescription
定义一种新型的Fibonacii 数列:
F[0] = a
F[1] = b
F[i] = F[i-1] * F[i-2] (n > 1)
请根据给出的a,b,n,求出F[n]的大小。
Input多组测试数据,处理到文件结束,对于每组测试数据:
输入三个整数a,b,n(0≤a,b,n≤10^9)
Output对于每组测试数据输出F[n]对1000000007取模后的结果,每组输出占一行。Sample Input0 1 0
6 10 2
Sample Output0
60
Author
答案是a^f[n-2]*b^f[n-1]
求斐波那契数列的话矩阵快速幂
由于指数不能直接%mod
所以需要降幂 用到欧拉降幂公式
x^n %mod = x ^(n %phi(mod) +phi(mod))%mod
然后就OK了
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;#define ll long long inttypedef struct Matrix{ ll mat[2][2];}matrix;long long mod;matrix A,B;Matrix matrix_mul(matrix a,matrix b){ matrix c; memset(c.mat,0,sizeof(c.mat)); int i,j,k; for(int i=0;i<2;i++) { for(int j=0;j<2;j++) { for(int k=0;k<2;k++) { c.mat[i][j]+=a.mat[i][k]*b.mat[k][j]; c.mat[i][j]%=mod; } } } return c;}Matrix matrix_quick_power(matrix a,ll k){ matrix b; memset(b.mat,0,sizeof(b.mat)); for(int i=0;i<2;i++) b.mat[i][i]=1; while(k) { if(k%2==1) { b=matrix_mul(a,b); k-=1; } else { a=matrix_mul(a,a); k/=2; } } return b;}ll quickmi(ll a,ll b){ ll ans=1; a%=mod; while(b>0) { if(b%2==1)ans=(ans*a)%mod; b/=2; a=(a*a)%mod; } return ans;}int main(){ ll a,b,n; while(~scanf("%lld%lld%lld",&a,&b,&n)) { mod=1e9+6; A.mat[0][0]=0;A.mat[0][1]=1; A.mat[1][0]=1;A.mat[1][1]=1; if(n==0) { printf("%lld\n",a); continue; } if(n==1) { printf("%lld\n",b); continue; } B=matrix_quick_power(A,n-2); A.mat[0][0]=1;A.mat[0][1]=1; A.mat[1][0]=0;A.mat[1][1]=0; A=matrix_mul(A,B); mod++; ll aa=quickmi(a,A.mat[0][0]+mod-1); ll bb=quickmi(b,A.mat[0][1]+mod-1); printf("%lld\n",aa*bb%mod); }}
0 0
- hrbustOJ 1787 New Fibonacci Number (矩阵快速幂+欧拉公式降幂)
- hrbust/哈理工oj 1787 New Fibonacci Number【欧拉降幂+矩阵快速幂】
- 【公式+矩阵快速幂】HDU_3117 Fibonacci Numbers
- HDU 3117 Fibonacci Numbers(矩阵快速幂+公式)
- Fibonacci(矩阵快速幂)
- 【矩阵快速幂】Fibonacci
- Fibonacci 矩阵快速幂
- Fibonacci 矩阵快速幂
- Fibonacci (矩阵快速幂)
- Fibonacci 快速幂矩阵
- poj - 3070 - Fibonacci(矩阵快速幂)
- hdu3117 Fibonacci Numbers (矩阵快速幂)
- hdu1588 Gauss Fibonacci (矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- 【POJ】3070Fibonacci(矩阵快速幂)
- POJ3070 - Fibonacci (矩阵快速幂)
- plugin & hook
- find命令
- 对JPA实体关系管理双向关联的一些思考
- Android 开发者的 RxJava 详解 - 作者:扔物线
- 欢迎使用CSDN-markdown编辑器
- hrbustOJ 1787 New Fibonacci Number (矩阵快速幂+欧拉公式降幂)
- Mac os下安装mysql
- 最大子序列
- SpringMVC实战(二)-运行原理
- 支付宝集成问题
- AutocAD二次开发出错:检索 COM 类工厂中 CLSID 为 {} 的组件时失败
- Android 图片加载Bitmap OOM错误解决办法
- Spring之数据库操作
- python read( )函数