diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2022-11-13 11:45:59 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2022-11-13 11:45:59 +0400 |
| commit | 2490844ed0b6e8fb64af0b8a18cc2bdfd87690f5 (patch) | |
| tree | 95401baf6f3ddf13857693817e59382f3a27dc3c | |
| parent | bcee37a8dda3ced1c09a671ddf321352bbc284e9 (diff) | |
Добавлена реализация четвёртой лабы
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | lab4/lab4.py | 52 | ||||
| -rw-r--r-- | lab4/requirements.txt | 2 |
3 files changed, 57 insertions, 0 deletions
@@ -3,6 +3,9 @@ # Rust target +# Python +venv + # LaTeX *.aux *.fls diff --git a/lab4/lab4.py b/lab4/lab4.py new file mode 100644 index 0000000..3f2ffa4 --- /dev/null +++ b/lab4/lab4.py @@ -0,0 +1,52 @@ +from sympy.polys.galoistools import gf_from_int_poly, gf_berlekamp +from sympy.polys.domains import ZZ + + +def poly_string(polynom): + tmp = [] + for power, coeff in enumerate(polynom): + if coeff == 0: + continue + s = str(coeff) if coeff != 1 and power > 0 or power == 0 else "" + if power >= 1: + s += "x" + if power >= 2: + s += f"^{power}" + tmp.append(s) + return "(" + " + ".join(tmp) + ")" + + +def is_prime(x): + for i in range(2, int(x ** 0.5) + 1): + if x % i == 0: + return False + return True + + +def main(): + p = input("Порядок p поля Z_p: ") + try: + p = int(p) + except ValueError: + print("Не удалось считать число") + return + + if not is_prime(p): + print("Число p должно быть простым") + return + + print("Введите коэффициенты многочлена [c_0 + c_1 * x + c_2 * x^2 + ...]:") + try: + c = map(int, input().split()) + except ValueError: + print("Коэффициенты должны состоять только из цифр") + return + + f = gf_from_int_poly(c, p) + print(f"Введённый многочлен над полем Z_{p}[x]: {poly_string(f)}") + factors = gf_berlekamp(f, p, ZZ) + print(" * ".join(map(poly_string, factors))) + + +if __name__ == "__main__": + main() diff --git a/lab4/requirements.txt b/lab4/requirements.txt new file mode 100644 index 0000000..c8a04f6 --- /dev/null +++ b/lab4/requirements.txt @@ -0,0 +1,2 @@ +mpmath==1.2.1 +sympy==1.11.1 |