summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Guschin <guschin.drew@gmail.com>2022-11-13 11:45:59 +0400
committerAndrew Guschin <guschin.drew@gmail.com>2022-11-13 11:45:59 +0400
commit2490844ed0b6e8fb64af0b8a18cc2bdfd87690f5 (patch)
tree95401baf6f3ddf13857693817e59382f3a27dc3c
parentbcee37a8dda3ced1c09a671ddf321352bbc284e9 (diff)
Добавлена реализация четвёртой лабы
-rw-r--r--.gitignore3
-rw-r--r--lab4/lab4.py52
-rw-r--r--lab4/requirements.txt2
3 files changed, 57 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 8aa37f4..3162b2c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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