11 auto find_factor=[](
auto&& find_factor, ll n)-> ll {
12 lll m=(ll)pow(n,0.125)+1;
13 auto _gcd=[](lll a, lll b) {
14 while(a) b%=a,swap(a,b);
17 auto _abs=[](lll x) {
return x<0?-x:x; };
18 for(ll c=1; c<=n; c++) {
19 auto f=[&](lll x) {
return((x%n)*(x%n)+c)%n; };
20 lll y=0,r=1,q=1,g=1,k=0,x=0,ys=0;
23 while(k<r*3/4) y=f(y),k++;
26 for(
int i=0; i<min(m,r-k); i++) y=f(y), q=q*_abs(x-y)%n;
33 while(g==1) y=f(y), g=_gcd(_abs(x-y),n);
38 return find_factor(find_factor,g);
47 while(n%i==0) n/=i, k++;
50 if(i==101 && n>=(1ll<<20)) {
54 ll j=find_factor(find_factor,n);
56 while(n%j==0) n/=j,k++;
63 vector<pair<ll,ll>> ret;
64 for(
auto p: mp) ret.push_back(p);
65 sort(ret.begin(),ret.end());