第一道矩阵快速幂,其实就是普通的快速幂再加上一个矩阵乘法就行了。
对斐波那契序列有gcd(f[a],f[b])=f(gcd(a,b)),c++有一个函数__gcd(注意是两个_);
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long int
const int mod=1e8;
ll N,M;
struct Node{
ll g[3][3];
};
Node mult(Node a,Node b)
{
Node c;
memset(c.g,0,sizeof(c.g));
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
for(int k=1;k<=2;k++)
c.g[i][j]=(c.g[i][j]+a.g[i][k]*b.g[k][j])%mod;
return c;
}
void q(ll n)
{
Node tp,res;
tp.g[1][1]=tp.g[1][2]=tp.g[2][1]=1;
tp.g[2][2]=0;
n-=2;
res.g[1][1]=res.g[1][2]=res.g[2][1]=1;
res.g[2][2]=0;
while(n){
if(1&n) res=mult(res,tp);
tp=mult(tp,tp);
n=n>>1;
}
printf("%lld",res.g[1][1]%mod);
}
int main()
{
cin>>N>>M;
ll n=__gcd(N,M);
if(n<=2) printf("1");
else q(n);
return 0;
}