题意简述:
给定素数(P),有(n)组询问,每次询问给定(A,B,C,D),要求出最小的(Ax+By),满足(x,yinmathbb N_+)且(Pmid|C^x-D^y|)。
数据范围:
(nle10^4,A,B,C,D,Ple10^9)
解法:
求出(mod P)意义下的原根(g),令(c=gamma_{P,g}(C),d=gamma_{P,g}(D),p=P-1),那么限制条件就变成了(cxequiv dypmod p)。
设(q=gcd(c,d,p)),令(cleftarrowfrac cq,dleftarrowfrac dq,pleftarrowfrac dq),这样就满足(gcd(c,d,p)=1)了。
那么(q=gcd(c,p))满足(q|y),令(cleftarrowfrac cq,pleftarrowfrac pq,Bleftarrow Bq),这样限制条件就变成了(cxequiv dypmod p),其中(gcd(c,p)=1)。
令(dleftarrow dc^{-1}),这样限制条件就变成了(xequiv dypmod p)。
同理(q=gcd(d,p))满足(q|x),令(dleftarrowfrac dq,pleftarrowfrac pq,Aleftarrow Aq),这样限制条件就变成了(xequiv dypmod p),其中(gcd(d,p)=1)。
考虑对答案变形:(Ax+By=A(dymod p)+By=(B+Ad)y-Aplfloorfrac{dy}p
floor)。
这样就把限制条件给消掉了。先特判(y=p)的情况,那么现在我们有(yin[1,p))。
设(p(y)=lfloorfrac{Cy+D}E floor,f(L,R,A,B,C,D,E)=minlimits_{yin[L,R]}(Ay+Bp(y))(C,Dge0,E>0))。
(p(L)=p(R))
显然此时最优的(yin{L,R}),直接计算即可。
(Cge E)
(f(L,R,A,B,C,D,E)=f(L,R,A+Blfloorfrac CE floor,Cmod E,D,E))
(C<E,Age0)
令(l=p(L),r=p(R)),对于(kin[l,r]),选择(min{y|p(y)=k})一定是最优的。
先特判(k=l)的部分,此时(y=L)。
否则可以求出(yin(lfloorfrac{kE-D-1}C
floor,lfloorfrac{(k+1)E-D-1}C
floor]),那么最小的(y)就是(lfloorfrac{kE-D+C-1}C
floor)。
因此(f(L,R,A,B,C,D,E)=max(AL+Bp(L),f(L+1,R,B,A,E,C-D-1,C)))。
(C<E,A<0)
推导过程与上一部分相同,(f(L,R,A,B,C,D,E)=max(AR+Bp(R),f(L,R-1,B,A,E,E-D-1,C)))。
这一部分计算过程的时间复杂度与类Euclid算法是一致的,为(O(nlog P))。
求最小原根的时间复杂度大概是(O(sqrt[4] Plog^2P))。
BSGS部分可以通过调整块大小做到(O(sqrt{nP}))。
因此总时间复杂度为(O(sqrt{nP}+nlog P+sqrt[4]Plog^2P))