NTT 求原根
使用NTT需要保证模数mod 为质数。
通过以下代码求得一个模数的原根 , 常见的质数的原根 998244353 -> 3 1e9+7 -> 5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include<bits/stdc++.h> #define ll long long #define IL inline #define RG register using namespace std; ll prm[1000],tot,N,root; ll Power(ll bs,ll js,ll MOD){ ll S = 1,T = bs; while (js){ if (js&1)S = S*T%MOD; T = T*T%MOD; js >>= 1; } return S; } IL ll GetRoot(RG ll n){ RG ll tmp = n - 1 , tot = 0; for (RG ll i = 2; i <= sqrt (tmp); i ++){ if (tmp%i==0){ prm[++tot] = i; while (tmp%i==0)tmp /= i; } } if (tmp != 1)prm[++tot] = tmp; //质因数分解 for (RG ll g = 2; g <= n-1; g ++){ bool flag = 1; for (RG int i = 1; i <= tot; i ++){ //检测是否符合条件 if (Power(g,(n-1)/prm[i],n) == 1) { flag = 0; break ; } } if (flag) return g; } return 0; //无解 } int main(){ cin >> N; root = GetRoot(N); cout<<root<<endl; return 0; } |
g是mod(r * 2 ^ k + 1)的原根
r * 2 ^ k + 1 |
r |
k |
g |
3 |
1 |
1 |
2 |
5 |
1 |
2 |
2 |
17 |
1 |
4 |
3 |
97 |
3 |
5 |
5 |
193 |
3 |
6 |
5 |
257 |
1 |
8 |
3 |
7681 |
15 |
9 |
17 |
12289 |
3 |
12 |
11 |
40961 |
5 |
13 |
3 |
65537 |
1 |
16 |
3 |
786433 |
3 |
18 |
10 |
5767169 |
11 |
19 |
3 |
7340033 |
7 |
20 |
3 |
23068673 |
11 |
21 |
3 |
104857601 |
25 |
22 |
3 |
167772161 |
5 |
25 |
3 |
469762049 |
7 |
26 |
3 |
998244353 |
119 |
23 |
3 |
1004535809 |
479 |
21 |
3 |
2013265921 |
15 |
27 |
31 |
2281701377 |
17 |
27 |
3 |
3221225473 |
3 |
30 |
5 |
75161927681 |
35 |
31 |
3 |
77309411329 |
9 |
33 |
7 |
206158430209 |
3 |
36 |
22 |
2061584302081 |
15 |
37 |
7 |
2748779069441 |
5 |
39 |
3 |
6597069766657 |
3 |
41 |
5 |
39582418599937 |
9 |
42 |
5 |
79164837199873 |
9 |
43 |
5 |
263882790666241 |
15 |
44 |
7 |
1231453023109121 |
35 |
45 |
3 |
1337006139375617 |
19 |
46 |
3 |
3799912185593857 |
27 |
47 |
5 |
4222124650659841 |
15 |
48 |
19 |
7881299347898369 |
7 |
50 |
6 |
31525197391593473 |
7 |
52 |
3 |
180143985094819841 |
5 |
55 |
6 |
1945555039024054273 |
27 |
56 |
5 |
4179340454199820289 |
29 |
57 |
3 |
作者:静默虚空
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端