void Pollard_Rho(int x) { if(Test(x)) { ///素数测试 Ans=max(x,Ans); return; } int t1=rand()%(x-1)+1; int t2=t1,b=rand()%(x-1)+1; t2=(mul(t2,t2,x)+b)%x; int p=1; int i=0; while(t1!=t2) { ++i; p=qmul(p,abs(t1-t2),x); if(p==0) { int t=gcd(abs(t1-t2),x); if(t!=1&&t!=x) { Pollard_Rho(t),Pollard_Rho(x/t); } return; } if(i%127==0) { p=gcd(p,x); if(p!=1&&p!=x) { Pollard_Rho(p),Pollard_Rho(x/p); return; } p=1; } t1=(mul(t1,t1,x)+b)%x; t2=(mul(t2,t2,x)+b)%x; t2=(mul(t2,t2,x)+b)%x; } p=gcd(p,x); if(p!=1&&p!=x) { Pollard_Rho(p),Pollard_Rho(x/p); return; } }