ll gcd(ll a,ll b){
return b?gcd(b,a%b):a;
}
ll lcm(ll a,ll b){
return a/gcd(a,b)*b;
}
//存在逆元前提是a与b互质即a与mod互质
//x为a的逆元,b为mod
ll exgcd(ll a,ll b,ll &x,ll &y){
if(b==0){x=1;y=0;return a;}
ll d=exgcd(b,a%b,x,y);
int temp=y;
y=x-a/b*y;
x=temp;4
2
return d;
}
int main()
{
ll n,mod;
scanf("%lld%lld",&n,&mod);
ll x,y;
ll d=exgcd(n,mod,x,y);//d为a,b最大公因数
x=(x%mod+mod)%mod;//x即为n的逆元
}
ll cal(ll a,ll b,ll n){//计算ax+by==n的非负整数解数
ll x=0,y=0,d;
d=exgcd(a,b,x,y);//d为a,b最大公因数,x,y为方程一组解
if(n%d!=0){
return 0;
}
x*=n/d,y*=n/d;
ll t1=b/d,t2=a/d;
if(x<1){
ll num=(1-x)/t1;
x+=num*t1;
y-=num*t2;
if(x<1){
y-=t2;
x+=t1;
}
}
if(y<1){
ll num=(1-y)/t2;
y+=num*t2;
x-=num*t1;
if(y<1){
y+=t2;
x-=t1;
}
}
ll ans = x>0&&y>0;
if(ans) {
ans+=min((x-1)/t1,((n-1)/b-y)/t2);
ans+=min((y-1)/t2,((n-1)/a-x)/t1);
}
return ans;
}