48分,求改
查看原帖
48分,求改
499463
zshcchenyi楼主2024/3/1 19:54
#include<cstring>
#include<cstdio>	         
#include<iostream>  
#include<algorithm>       
using namespace std;
const int mod=1e4,N=2;
struct ma{
	int m[N][N];
};
ma operator * (const ma& a,const ma& b){
	ma c;
	memset(c.m,0,sizeof c.m);
	for(int i=0;i<N;i++){
		for(int j=0;j<N;j++){
			for(int k=0;k<N;k++){
				c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
			}
		}
	}
	return c;
}
ma po(ma a,long long n){
	ma ans;
	memset(ans.m,0,sizeof ans.m);
	for(int i=0;i<N;i++){
		ans.m[i][i]=1;
	}
	while(n){
		if(n&1){
			ans=ans*a;
		}
		a=a*a;
		n>>=1;
	}
	return ans;
}
int main(){
	long long n,mm;
	cin>>n>>mm;
	ma a;
	for(int i=0;i<=1;i++){
		a.m[i][0]=1;
		a.m[0][i]=1;
	}
	a.m[1][1]=0;
	ma anns;
	long long ikun=__gcd(n,mm);
	if(ikun<=2){
		cout<<1;
		return 0;
	}
	anns=po(a,ikun);
	cout<<anns.m[1][0]<<endl; 
	
	return 0;
} 
2024/3/1 19:54
加载中...