u's的影响力(两次矩阵快速幂+费马小定理+细节)

链接:https://ac.nowcoder.com/acm/contest/3002/J
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

本题测试样例已经更(jia)新(qiang)。

求f[n]=f[n-1]*f[n-2]*(a^b);

μ's在九人齐心协力下,影响力越来越大了!

已知第一天影响力为   ,第二天影响力为   ,从第三天开始,每一天的影响力为前两天影响力的乘积再乘以   的   次方。 用数学语言描述是:
设第   天的影响力为   ,那么   , ,对于   ,  
她们想知道第   天影响力是多少?
由于这个数可能非常大,只需要输出其对   取模的值就可以了。

输入描述:

一行五个正整数:  。
 

    

输出描述:

第   天的影响力对   取模的值。

示例1

输入

复制4 2 3 2 1

4 2 3 2 1

输出

复制72

72

说明

f(1)=2,f(2)=3,f(3)=f(1)*f(2)*2=12,f(4)=f(2)*f(3)*2=72

备注:

1000000007是素数。
#include
using namespace std;
const int maxn=1e5+5;
typedef long long ll;
const int mod=1e9+7;
const int mod1=1e9+6;
struct mat1{
	ll a[2][2];
};
struct mat2{
	ll a[3][3];
};
mat1 mul(mat1 a,mat1 b){
	 mat1 ans;
	 memset(ans.a,0,sizeof(ans.a));
	 for(int i=0;i<2;i++){
	 	for(int j=0;j<2;j++){
	 		for(int k=0;k<2;k++){
	 			ans.a[i][j]=(ans.a[i][j]+(a.a[i][k]*b.a[k][j])%mod1)%mod1;
			 }
		 }
	 }
	 return ans;
}
mat2 mul(mat2 a,mat2 b){
	 mat2 ans;
	 memset(ans.a,0,sizeof(ans.a));
	 for(int i=0;i<3;i++){
	 	for(int j=0;j<3;j++){
	 		for(int k=0;k<3;k++){
	 			ans.a[i][j]=(ans.a[i][j]+(a.a[i][k]*b.a[k][j])%mod1)%mod1;
			 }
		 }
	 }
	 return ans;
}
mat1 res1,ans1;
ll ksmmat(ll n){
	memset(res1.a,0,sizeof(res1.a));
	memset(ans1.a,0,sizeof(ans1.a));
	ans1.a[0][0]=1;ans1.a[1][1]=1;
	res1.a[0][0]=1;res1.a[0][1]=1;res1.a[1][0]=1;
	while(n){
		if(n&1){
			ans1=mul(res1,ans1);
		}
		res1=mul(res1,res1);
		n>>=1;
	}
	return ans1.a[0][0];
}
ll ksmmat1(ll n){
	mat2 res,ans;
	memset(res.a,0,sizeof(res.a));
	memset(ans.a,0,sizeof(ans.a));
	ans.a[0][0]=2;ans.a[1][0]=1;ans.a[2][0]=1;
	res.a[0][0]=1;res.a[0][1]=1;res.a[0][2]=1;res.a[1][0]=1;res.a[2][2]=1;
	while(n){
		if(n&1){
			ans=mul(res,ans);
		}
		res=mul(res,res);
		n>>=1;
	}
	return ans.a[0][0];
}
ll ksm(ll a,ll b){
	a%=mod;
	ll ans=1;
	while(b){
		if(b&1)ans=(ans*a)%mod;
		a=(a*a)%mod;
		b>>=1;
	}
	return ans;
}

int main(){
	ll n,x,y,a,b;
	cin>>n>>x>>y>>a>>b;
	x%=mod;
	y%=mod;
	if(n==1){
		cout<

你可能感兴趣的:(C++,矩阵快速幂)