求助卡常

灌水区

ningago @ 2022-07-10 13:09:19

Code:

    for(int i = 1;i <= T;i++)
    {
        while(1)
        {
            mul(A,B,prime[now]);
            if(A <= qr[i])
            {
                B = A;
                now++;
            }
            else
                break;
        }
        ans[qr[i].id] = B;
    }

mul是高精乘,答案存进A

感觉结构体赋值常数太大了,求助大佬怎么调整


by Querainy @ 2022-07-10 13:23:57

你的mul是啥啊


by ningago @ 2022-07-10 13:25:11

@华山抡剑

谔谔

mul是高精乘,答案存进A


by ningago @ 2022-07-10 13:25:34

感觉高精的代码不用贴了吧……


by dehsirehC @ 2022-07-10 13:29:24

瓶颈难道不应该是高精吗?


by ningago @ 2022-07-10 13:30:53

@liqingyang 然而prime是个int,高精是O(10len)


by ningago @ 2022-07-10 13:31:30

(发这个贴的缘故是不会压位高精


by 2020kanade @ 2022-07-10 13:35:11

要不FFT高精试试


by rxjdasiwzl @ 2022-07-10 14:05:04

@ningago 压位和不压位只有进制的区别,其他完全一致


by baiABC @ 2022-07-10 14:43:55

A 和 B 可以存指针避免结构体复制吧


by baiABC @ 2022-07-10 14:52:09

decltype(A) *P1 = &A, *P2 = &B;
for(int i = 1; i <= T; i++)
{
   while(1)
   {
      mul(P1,P2,prime[now]);
      // 传参用指针或引用
      if(*P1 <= qr[i])
      {
         swap(P1, P2);
         now++;
      } 
      else break;
   }
   ans[qr[i].id] = *P2;
}

| 下一页