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            

作者:静默虚空
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。

posted @   楼主好菜啊  阅读(2287)  评论(2编辑  收藏  举报
编辑推荐:
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目
点击右上角即可分享
微信分享提示