Я пишу программу для шифрования и шифрования кодов Fire (надеюсь, я написал его второе имя правильно).
На этапе поиска синдрома полинома я использую поликлинический класс numpy для деления длинных полиномов (19437 градусов), но это не работает. Может быть, это моя вина, или, возможно, это невозможно для долгих степеней в этом классе.
Я был бы признателен за любую помощь в этом: может быть, я могу сделать это любым другим способом?
import numpy as np
import random
def main():
polynome_second = np.poly1d
file_code = open('code.txt', 'w')
np.random.seed()
for i in range(19437):
file_code.write(str(random.randint(0, 1))) # creating a long code
file_code.close()
file_code = open('code.txt', 'r')
code_of_string = file_code.read()
polynomial_first = np.poly1d([int(code_of_string[i]) for i in range(code_of_string.__len__())])
coeffs_for_forming_polynomial = []
for i in range(30): # creating forming polynomial: p(x) = x^29 + x^22 + x^19 - x^10 - x^3 - 1
if i == 29 or i == 22 or i == 19:
coeffs_for_forming_polynomial.append(-1)
elif i == 10 or i == 3 or i == 0:
coeffs_for_forming_polynomial.append(1)
else:
coeffs_for_forming_polynomial.append(0)
forming_polynomial = np.poly1d(coeffs_for_forming_polynomial)
print(forming_polynomial)
# syndrome_polynomial = np.poly1d(1)
syndrome_polynomial = polynomial_first / forming_polynomial #
print(syndrome_polynomial)
# print(isinstance(syndrome_polynomial, np.poly1d))
# print(polynomial_first)
file_code.close()
return
main()
и вот вывод с ошибкой из IDE:
C:\Program Files\Python37\lib\site-packages\numpy\lib\polynomial.py:970: RuntimeWarning: overflow encountered in subtract
r[k:k+n+1] -= d*v
C:\Program Files\Python37\lib\site-packages\numpy\lib\polynomial.py:970: RuntimeWarning: invalid value encountered in multiply
r[k:k+n+1] -= d*v
C:\Program Files\Python37\lib\site-packages\numpy\lib\polynomial.py:970: RuntimeWarning: invalid value encountered in subtract
r[k:k+n+1] -= d*v