반응형
다음 코드는 원시근과 원시근의 이산대수도표를 생성해주는 코드이다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
반응형
'어쩌면 유용할 코드 모음집' 카테고리의 다른 글
[파이썬 코드] 오일러 판정 (0) | 2021.12.31 |
---|---|
[파이썬 코드] 고속지수연산 (0) | 2021.12.31 |
댓글