传送门:
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define re register
const int N=4e4+10;
const int M=4e4;
const int mod=1e8;
inline void read(int &a)
{
a=0;
int d=1;
char ch;
while(ch=getchar(),ch>'9'||ch<'0')
if(ch=='-')
d=-1;
a=ch^48;
while(ch=getchar(),ch>='0'&&ch<='9')
a=(a<<3)+(a<<1)+(ch^48);
a*=d;
}
struct note
{
int a[5][5];
}ans,a;
inline void init()
{
for(re int i=1;i<=2;i++)
ans.a[i][i]=1;
a.a[1][1]=1;
a.a[1][2]=1;
a.a[2][1]=1;
}
note Mat(note x,note y)
{
note c;
for(re int i=1;i<=2;i++)
for(re int j=1;j<=2;j++)
c.a[i][j]=0;
for(re int i=1;i<=2;i++)
for(re int j=1;j<=2;j++)
for(re int k=1;k<=2;k++)
(c.a[i][j]+=1ll*x.a[i][k]*y.a[k][j]%mod)%=mod;
return c;
}
inline int gcd(int a,int b)
{
return !b?a:gcd(b,a%b);
}
int main()
{
init();
int n,m;
read(n);
read(m);
int p=gcd(n,m);
if(p<=2)
return puts("1"),0;
p-=2;
while(p)
{
if(p&1)
ans=Mat(ans,a);
a=Mat(a,a);
p>>=1;
}
printf("%d",(ans.a[1][1]+ans.a[1][2])%mod);
return 0;
}