T了一个点,T了第一个点,不知道咋优化了,求助求助!
查看原帖
T了一个点,T了第一个点,不知道咋优化了,求助求助!
350663
xinghe楼主2023/1/27 23:03
#include<iostream>
#include<cstring>
typedef long long ll;
using namespace std;
ll mod=1e9+7,t[2][2];
void mul(ll a[2][2],ll b[2][2]) {
	memset(t,0,sizeof(t));
	for(int i=0; i<2; i++)
		for(int j=0; j<2; j++)
			for(int k=0; k<2; k++)
				t[i][j]=(t[i][j]+a[i][k]*b[k][j])%mod;
	memcpy(b,t,sizeof(t));
}
int main() {
	ll n;
	cin>>n;
	ll a[2][2]= {1,0,1,0};
	ll b[2][2]= {1,1,1,0};
	n=n-2;
	while(n) {
		if(n&1) mul(b,a);//实现a=b*a
		mul(b,b);//实现b=b*b
		n>>=1;
	}
	cout<<a[0][0]<<endl;
	return 0;
}
2023/1/27 23:03
加载中...