pollard's rho模板题。
调参调到160ms无能为力了,应该是写法问题,不玩了。
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll e,p,c; ll mul(ll u,ll v){ return(u*v-ll((long double)u*v/p)*p+p)%p; } ll wop(ll u,ll v){ ll s=1; for(;v;v>>=1){ if(v&1)s=mul(s,u); if(v>1)u=mul(u,u); } return s; } void gcd(ll a,ll b,ll&x,ll&y){ if(!b)x=1,y=0; else gcd(b,a%b,y,x),y-=a/b*x; } ll inv(ll a,ll b,ll x=0,ll y=0){ gcd(a,b,x,y); return(x+b)%b; } ll sol(){ ll d,i,j=19999811; for(int s=1;;++s){ i=s^s&-s?i:j; j=(mul(j,j)+p-1)%p; if((d=__gcd(abs(i-j),p))!=1&&d!=p) break; } return(d-1)*(p/d-1); } int main(){ cin>>e>>p>>c; ll d=inv(e,sol()); cout<<d<<" "<<wop(c,d)<<endl; }