数论:任意数求原根(python代码)

# 用辗转相除求最大公因子
def gcd(a,b):
    r=a%b
    while(r!=0):
        a=b
        b=r
        r=a%b
    return b

# 欧拉函数-暴力循环版
def euler(a):
    count=0
    for i in range(1,a):
        if gcd(a,i)==1:
            count+=1
    return count

def order(a,n,b):
#   输出b在mod(a)中的阶
#   n是mod(a)群的阶
    p=1
    while(p<=n and (b**p%a!=1)):
          p+=1
    if p<=n:
          return p
    else:
          return -1

# 求任意数原根
def primitive_root(a):
    n=euler(a)
    prim=[]
    for b in range(2,a):
        if order(a,n,b)==n:
            prim.append(b)
    print(prim)

测试结果:

数论:任意数求原根(python代码)

 

上一篇:求最大公约数的欧几里得算法与其伪代码


下一篇:g++ gcc 的区别