본문 바로가기
어쩌면 유용할 코드 모음집

[파이썬 코드] 원시근과 이산대수도표

by 프룹 2021. 12. 31.
반응형

다음 코드는 원시근과 원시근의 이산대수도표를 생성해주는 코드이다.

 

def binary(val):
b = []
while val > 0:
if val % 2 == 1:
b.append(1)
else:
b.append(0)
val = val // 2
return b
# 고속지수연산
def fastExpOp(a, exp, n):
# a : 밑, exp : 지수, n : 모듈러 값
x = binary(exp)
y = 1
for i, xi in enumerate(x):
if xi == 1:
y = (a * y) % n
a = (a*a) % n
return y
# 원시근
# 1이 한번은 나와야 군의 원소이다.
zp = 7
primitiveRoot = []
for i in range(1, zp):
element = []
for j in range(1, zp):
element.append(fastExpOp(i, j, zp))
if 1 in element:
print(i, ':', element, end=" ")
if element.count(1) == 1 and element[-1] == 1:
print(' primitive root', i)
primitiveRoot.append(i)
else:
print()
print('이산대수도표')
for i in primitiveRoot:
element = [0] * zp
for j in range(1, zp):
element[(i**j) % zp] = j
element.pop(0)
print(i, ':', element)

결과 : 군 G = < Z(7)*, X >에서의 원시근과 원시근의 이산대수 도표

원시근 : 3, 5

반응형

댓글