zoukankan      html  css  js  c++  java
  • 寻找原根

    若模m有缘跟,则原根共有(varphi(varphi(m)))个原根。
    若m是奇素数p,则模p共有(varphi(p-1))个原根。
    若g为关于模p的一个原根,则模p的全部原根:
    ( { g^k| 1 leq k leq p-1, (p-1,k) = 1 } )
    对于p-1的每个正因子d,模p阶为d的数共有(varphi(d))个,是
    ( { g^k| 1 leq k leq p-1, (p-1,k) = frac{p-1}{d} } )

    def gcd(a, b):
        while a != 0:
            a, b = b%a, a
        return b
    
    p = 17 
    # 假设存在原根
    for g in range(2, p - 1): #寻找最小原根
    	SET = set()
    	for i in range(p):
    		SET.add(pow(g, i, p))
    	if len(SET) == p-1: # 找到原根
    		print("Found One Generator! g = %d" % g)
    		break
    	g = None
    # g = 3 # 3为关于17的其中一个生成元
    
    if g:
    	K_exponent = [] # 寻找所有生成元(原根)
    	for i in range(1, p):
    		if(gcd(i, p-1)==1):
    			K_exponent.append(i)
    	generator = []
    	for k in K_exponent:
    		generator.append(pow(g, k, p))
    	print("All of generators: ", generator)
    else:
    	print("No generator!")
    

  • 相关阅读:
    抓老鼠
    我的寒假作业
    寒假作业
    大一上学期C语言学习总结
    我的三位老师
    自我介绍
    2019春季第七周作业
    第六周总结
    第五周作业及其总结
    2019春季第四周作业
  • 原文地址:https://www.cnblogs.com/Higgerw/p/14818506.html
Copyright © 2011-2022 走看看