计算原根python实现

调用库

主函数

from reduced_residue_system import reducedResidueSystem
from factorization import factorization
from Euler_totient_function import EulerTotientFunction

def primitiveRoot(m: int):
    try:
        int(m)
        if m < 1:
            return None
        elif m==2:
            return [1]
        else:
            phi = EulerTotientFunction(m)
            factorizationDict = factorization(phi)
            reducedResidueSystemList = reducedResidueSystem(m)
            reducedResidueSystemListPhi = reducedResidueSystem(phi)
            exponential = []
            for k in factorizationDict:
                k = int(k)
                exponential.append(phi//k)
            for r in reducedResidueSystemList:
                isPrimitiveRoot = 1
                for e in exponential:
                    if r**e % m == 1:
                        isPrimitiveRoot = 0
                        break
                if isPrimitiveRoot:
                    retList = []
                    for e in reducedResidueSystemListPhi:
                        retList.append(r**e % m)
                    return retList
            return None
    except Exception as e:
        print(e)
        return None

测试

print(primitiveRoot(2))
print(primitiveRoot(4))
print(primitiveRoot(5))
print(primitiveRoot(9))
print(primitiveRoot(41))

测试结果

[1]
[3]
[2, 3]
[2, 5]
[6, 11, 29, 19, 28, 24, 26, 34, 35, 30, 12, 22, 13, 17, 15, 7]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值