【数论学习】关于原根的LJ笔记

有关NTT的一个小知识点:对于一个模数p,所有的数在非0意义下都是原根的幂次的形式

原根是虾米?

对于一个模数p,所有的数在非0意义下都是 原根的幂次的形式。

于是这里g0,g1,g2,g3……..互不相同,且gphi(p)=g0==1

一个模数存在原根的充要条件,形式是以下四种形式:m=2,4,pa,2*pa(p为一个质数)

m原根个数 phi( phi(m) )

求原根方法

对于一个质数p对p-1因式分解然后从2开始枚举就好了!

如果不是质数,那么n,我们对phi(n)进行因式分解枚举就好。

以下为方便对质数进行考虑(合数类同)

P-1=p1k1*p2k2*p3k3….*pnkn

一个很原始的想法:对于每个数,将他的每个幂次计算一遍,看是不是刚好p-1的一个循环。(刚好完全占满)O(p-1)

简化:对于判断g是否为p的原根只需要检验g((x-1)/p1),g((x-1)/p2)….g^((x-1)/pn)这n个数中是否有一个数mod p为1,若存在在g不是原根(因为原本那个数不是,包含因子后一定也不是),时间复杂度O(m)^log(p-1)

伪代码

int  yuangen(int p)
{

divi(p-1)//分解质因数
for( g=1;g-->phi(p);g++ )
{
	bool  ff=1;
	for(i=1-->top)//top为多少个质因数
	{
		int gg=(p-1)/num[i];//质因数num
		if(montgomery(g,gg,p)==1)//Montgomey二分快速幂 
			ff=0,break;
	} 
	if (ff) return g;
}
return -1; 
}

NTT用得到得原根表,(转载)

一个简易的求原根法(真代码):

inline bool judge(int x, int p)  
{  
    for (int i = 2; i * i <= p; i ++)  
        if ((p - 1)%i==0&&ksm(x,(p-1)/i,p)==1) return 0;  
    return 1;  
}  
inline int Find_Root(int p)  
{  
    if (p == 2) return 1;  
    int res = 2;  
    for (; !judge(res, p); res ++) ;  
    return res;  
}

 

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 @ 2018-04-30 22:40  Newuser233  阅读(50)  评论(0)    收藏  举报