Skip to content

Instantly share code, notes, and snippets.

@AppleVegas
Last active November 28, 2024 15:30
Show Gist options
  • Save AppleVegas/83c7502ac2455dcf4f6a0960cfc0cfad to your computer and use it in GitHub Desktop.
Save AppleVegas/83c7502ac2455dcf4f6a0960cfc0cfad to your computer and use it in GitHub Desktop.
Divide polynomials in pre-defined GF(16), output remainder and result
A = [1, 2, 4, 8, 3, 6, 12, 11, 5, 10, 7, 14, 15, 13, 9]
LOG_A = [None] * 16
for i in range(0, len(A)):
LOG_A[A[i]] = i
#print(LOG_A[A[9]^A[9]^A[7]^A[6]])
#quit()
divisor = [A[12],A[6],0,0,0,0,0,A[7],A[6],0,0,A[10],A[7],A[3],A[14]]
#divisor = [A[13],A[11],0,A[3],0,0,0,0,0,0,0,A[11],A[3],A[13],A[1]]
dividend = [1,A[13],A[6],A[3],A[10]]
result = [None] * (len(divisor) - (len(dividend) - 1))
print(" + ".join([f"a^{LOG_A[divisor[j]]}x^{len(divisor) - j - 1}" for j in range(len(divisor)) if divisor[j] != 0]))
for i in range(0, len(divisor) - (len(dividend) - 1)):
if divisor[i] == 0:
continue
sub = [(LOG_A[a] + LOG_A[divisor[i]]) % 15 for a in dividend]
result[i] = divisor[i]
for j in range(len(sub)):
divisor[i + j] = divisor[i + j] ^ A[sub[j]]
print(f"домножаем делитель на a^{LOG_A[result[i]]}x^{len(divisor) - (len(dividend)) - i}, вычитаем\n"," + ".join([f"a^{sub[j]}x^{len(divisor) - (i + j) - 1}" for j in range(len(sub))]), "\n")
print(" + ".join([f"a^{LOG_A[divisor[j]]}x^{len(divisor) - j - 1}" for j in range(len(divisor)) if divisor[j] != 0]))
print("Готово\n")
print("Остаток: ", " + ".join([f"a^{LOG_A[divisor[j]]}x^{len(divisor) - j - 1}" for j in range(len(divisor)) if divisor[j] != 0]))
print("Частное: ", " + ".join([f"a^{LOG_A[result[j]]}x^{len(result) - j - 1}" for j in range(len(result)) if result[j] != None]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment