int d=1,st=0,ed=0,tmp;
while(1)
{
c=rand()%x+3;
auto f=[=](int t){return ((__int128)t*t+c)%x;};
for(int i=0;i<128;++i)
{
st=f(st),ed=f(f(ed));
tmp=(__int128)d*abs(st-ed)%x;
if(st==ed||!tmp)break;
d=tmp;
}
d=gcd(d,x); if(d>1)break;
}
这样实现为什么跑那么慢,改成下面为什么就好了?
int d=1,st=0,ed=0,tmp;
while(1)
{
c=rand()%x+3;
auto f=[=](int t){return ((__int128)t*t+c)%x;};
while(1)
{
for(int i=0;i<128;++i)
{
st=f(st),ed=f(f(ed));
tmp=(__int128)d*abs(st-ed)%x;
if(st==ed||!tmp)break;
d=tmp;
}
d=gcd(d,x); if(st==ed||d>1)break;
}
if(d>1)break;
}