TLE求助
查看原帖
TLE求助
370829
_8762楼主2022/4/24 21:32
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;
    }
2022/4/24 21:32
加载中...