证明的理解和自己推导都已经完成了,但是有一个疑问还在蒟蒻的心里没想明白——为什么在a==0的时候return?
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int f(int a,int b,int c,int n){
if( a==0 )
return b/c;
if( a>=c || b>=c )
return (n+1)*n/2*(a/c)+(n+1)*(b/c)+f(a%c,b%c,c,n);
int m=(a*n+b)/c;
return n*m-f(c,c-b-1,a,m-1);
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int p,q;
cin>>p>>q;
cout<<f(q,0,p,(p-1)/2)+f(p,0,q,(q-1)/2);
return 0;
}