矩阵快速幂求助
  • 板块灌水区
  • 楼主___A__
  • 当前回复9
  • 已保存回复9
  • 发布时间2024/1/24 14:10
  • 上次更新2024/1/24 15:09:45
查看原帖
矩阵快速幂求助
275860
___A__楼主2024/1/24 14:10

SP8001

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int n=3,N=n+5,mod=1e9+7;
int num;
struct matrix{
    int a[N][N];
    matrix(){
        memset(a,0,sizeof(a));
    }
};
matrix operator*(matrix a,matrix b){
    matrix ret;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            for(int k=1;k<=n;k++){
                ret.a[i][j]=(ret.a[i][j]+a.a[i][k]*b.a[k][j])%mod;
            }
        }
    }
    return ret;
}
int fib(int num){
	if(!num){
		return 0;
	}
	num--;
	matrix ret;
    ret.a[1][1]=1,ret.a[1][2]=1;
    matrix base;
    base.a[1][1]=1,base.a[1][2]=1,base.a[1][3]=1,base.a[2][2]=1,base.a[2][3]=1,base.a[3][2]=1;
    while(num){
        if(num%2){
            ret=ret*base;
        }
        base=base*base,num/=2;
    }
    return ret.a[1][1];
}
int T,l,r;
signed main(){
    cin>>T;
    while(T--){
    	cin>>l>>r;
    	int ans=fib(r)-fib(l-1);
    	cout<<(ans%mod+mod)%mod<<'\n';
	}
}
2024/1/24 14:10
加载中...