12 auto find_factor=[](
auto&& find_factor, ll n)-> ll {
13 lll m=(ll)pow(n,0.125)+1;
14 auto _gcd=[](lll a, lll b) {
15 while(a) b%=a,swap(a,b);
18 auto _abs=[](lll x) {
return x<0?-x:x; };
19 for(ll c=1; c<=n; c++) {
20 auto f=[&](lll x) {
return((x%n)*(x%n)+c)%n; };
21 lll y=0,r=1,q=1,g=1,k=0,x=0,ys=0;
24 while(k<r*3/4) y=f(y),k++;
27 for(
int i=0; i<min(m,r-k); i++) y=f(y), q=q*_abs(x-y)%n;
34 while(g==1) y=f(y), g=_gcd(_abs(x-y),n);
39 return find_factor(find_factor,g);
48 while(n%i==0) n/=i, k++;
51 if(i==101 && n>=(1ll<<20)) {
55 ll j=find_factor(find_factor,n);
57 while(n%j==0) n/=j,k++;
64 vector<pair<ll,ll>> ret;
65 for(
auto p: mp) ret.push_back(p);
66 sort(ret.begin(),ret.end());