类欧几里得模板

类欧几里得模板

存个类欧几里德模板,想看看原理就看看敦哥(洪华敦)的教程
敦哥无敌

ll inv2=qpow(2,mod-2);
ll sum(ll a,ll b,ll c,ll n){
	if(!a) return 0;
	ll x,y;
	if(a>=c||b>=c){
		x=sum(a%c,b%c,c,n);
		y=1ll*(a/c)%mod*(n%mod)%mod*(n%mod+1)%mod*inv2%mod+1ll*(n%mod+1)*(b/c)%mod;
		y=(y+x)%mod;
		return y;
	}
	ll m=((__int128)a*n+b)/c;
	x=sum(c,c-b-1,a,m-1);
	y=((__int128)n*m-x)%mod;;
	return y;
}

你可能感兴趣的:(模板)