群的生成元
定义
群的生成元是指一组基本的元素,通过重复应用群运算,由此可以构建出整个群结构。
有限域\(\mathbb{F}_p\)中的每一个元素,都可以在重复进行乘法运算的过程中被用来构成一个子群H。即对于任意元素g,都可以据此构成子群$$H =
有限循环群的求解原理与挑战
在数论与密码学中,模素数p的乘法群\(\mathbb{Z}_p^*\)是一个阶为\(p-1\)的有限循环群。该群是指通过其幂次生成整个群的元素g,形式上,g是生成元当且仅当$$g^{(p-1)/q}\not\equiv1 \bmod{p}$$
对于p-1的每一个素因子q成立。
优化求解策略
1、预处理p-1的素因子分解
若可以预先得到p-1的完整素因子分解$$p-1=q_1{e_{1}}*q_2{e_{2}}···q_k^{e_{k}}$$
则只需要验证每个候选g满足:$$g^{(p-1)/q_i}\not\equiv1\bmod{p}$$
2、利用已知原根加速搜索
若已知一个原根\(g_0\),则所有生成元可表示为:$$g=g_0^{k}\bmod{p}$$其中\(gcd(k,p-1)=1\).
def find_primitive_root(p, factors):
""" 给定素数 p 和 p-1 的素因子列表 factors,返回一个原根 """
from random import randint
from math import gcd
phi = p - 1
while True:
for g in range(2,p-1):
if all(pow(g, phi // q, p) != 1 for q in factors):
return g
p = 28151
factors = [2,5,563]
print(find_primitive_root(p,factors))

浙公网安备 33010602011771号