NTT用到的各种素数

lolifamily

转载自 miskcoo

是这样的,这几天在写 NTT,由于是在模意义下的,需要各种素数……

然后就打了个表方便以后查了。

如果𝑟(2𝑘+1)是个素数,那么在mod𝑟(2𝑘+1)意义下,可以处理2𝑘以内规模的数据。

2281701377=17×227+1是一个挺好的数,平方刚好不会爆 long long。

1004535809=479×221+1加起来刚好不会爆 int 也不错。

还有就是 UOJ 常用的998244353=119×223+1

打表方法:对于每个𝑘,找到最小𝑟满足𝑟(2𝑘+1)是素数(𝑔mod𝑟(2𝑘+1)的原根)。

𝑟(2𝑘+1)𝑟𝑘𝑔
3112
5122
17143
97355
193365
257183
768115917
1228931211
409615133
655371163
78643331810
576716911193
73400337203
2306867311213
10485760125223
1677721615253
4697620497263
998244353119233
1004535809479213
2013265921152731
228170137717273
32212254733305
7516192768135313
773094113299337
20615843020933622
206158430208115377
27487790694415393
65970697666573415
395824185999379425
791648371998739435
26388279066624115447
123145302310912135453
133700613937561719463
379991218559385727475
4222124650659841154819
78812993478983697506
315251973915934737523
1801439850948198415556
194555503902405427327565
417934045419982028929573