RT。有没有路过的好心人帮忙交上去。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
int tot=0;
inline void exgcd(int a,int b,int &x,int &y){
if(!b)return x=1,y=0,void();
exgcd(b,a%b,y,x),y-=a/b*x;return;
}
signed main(){
int T;cin>>T;
while(T--){
int res=0,a,b,c,p;cin>>a>>b>>c>>p;
int d=__gcd(a,b);
for(int i=0;i*c<=p;i++){
int tmp=p-c*i,x=0,y=0;
if(tmp%d)continue;
int A=a/d,B=b/d,C=tmp/d;
exgcd(A,B,x,y);
x*=C,y*=C;
int xmn=x%B;
if(xmn<0)xmn+=B;
int ymn=y%A;
if(ymn<0)ymn+=A;
int ymx=(C-A*xmn)/B;
if(ymx<0)continue;
res+=(ymx-ymn)/A+1;
}
printf("Case %lld: %lld\n",++tot,res);
}
}