求助0分
查看原帖
求助0分
638274
_YQY楼主2022/8/3 09:52
#include<bits/stdc++.h>
using namespace std;
unsigned long long a[300][300],b[300][300],c[300][300];
int fib(int n) {
	n--;
	memset(a,299,0);
	memset(b,299,0);
	memset(c,299,0);
	a[1][1]=0;a[2][1]=1;a[1][2]=1;a[2][2]=1;	
	b[1][1]=1;b[2][1]=0;b[1][2]=0;b[2][2]=1;
	while(n>0) {
		if(n%2==1)  {
			for(int i=1; i<=2; i++)
				for(int j=1; j<=2; j++)
					for(int k=1; k<=2; k++)
						c[i][k]=c[i][k]+b[i][j]*a[j][k];
			for(int i=1; i<=2; i++) {
				for(int j=1; j<=2; j++) {
					b[i][j]=c[i][j];
					c[i][j]=0;
				}
			}
		}
		for(int i=1; i<=2; i++)
			for(int j=1; j<=2; j++)
				for(int k=1; k<=2; k++)
					c[i][k]=c[i][k]+a[i][j]*a[j][k];
		for(int i=1; i<=2; i++)
			for(int j=1; j<=2; j++) {
				a[i][j]=c[i][j];
				c[i][j]=0;
			}
		n=n/2;
	}
	return b[2][2];
}
int gcd(unsigned long a,unsigned long b){
	if(a%b==0) return b;
	return gcd(b,a%b);
}
int main() {
	unsigned long long n,m;
	cin>>n>>m;
	unsigned long long a=fib(n);
	unsigned long long b=fib(m);
	cout<<a<<endl<<b<<endl;
	cout<<gcd(a,b)<<endl;
}
2022/8/3 09:52
加载中...