原题链接http://acm.hdu.edu.cn/showproblem.php?pid=6624
题意求一个最小正整数b,使得 a ≡ bx (mod p)
这里直接放上dls的题解,讲的贼清楚。
然后辗转相除一下,找到出口再把答案递归回去就ok了。
注意的是,b乘x会炸long long
#include<bits/stdc++.h> typedef long long ll; using namespace std; const int N=1e5+5; const ll mod=998244353; void ggcd(ll au,ll ad,ll bu,ll bd,ll &b,ll &y) { ll t=au/ad+1; if(t<=ll(bu/bd)) { b=t,y=1; return ; } ggcd(bd,bu-bd*(t-1),ad,au-ad*(t-1),y,b); b+=(t-1)*y; } ll b,y,p,x; ll mul(ll a,ll b) { ll ans=0; while(b) { if(b&1)ans=(ans+a)%p; a=(a+a)%p; b>>=1; } return ans; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%lld%lld",&p,&x); ggcd(p,x,p,x-1,b,y); ll a=mul(b,x); printf("%lld/%lld ",a,b); } return 0; }