Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter import *
- from tkinter import filedialog
- def gcd(a, b):
- while b != 0:
- a, b = b, a % b
- return a
- def calculate_gcd():
- a = int(entry_a.get())
- b = int(entry_b.get())
- result = gcd(a, b)
- result_label.config(text="GCD: " + str(result))
- # алгоритм вычисляет НОД для b и остатка от деления a на b, а также коэффициенты x и y для этого шага рекурсивно
- # После рекурсивного вызова алгоритма он получает НОД и коэффициенты
- # Затем алгоритм вычисляет коэффициенты x и y для исходных чисел a и b, используя следующие формулы
- def extended_gcd(a, b):
- if a == 0:
- return b, 0, 1
- else:
- g, x, y = extended_gcd(b % a, a)
- return g, y - (b // a) * x, x
- def calculate_extended_gcd():
- a = int(entry_a.get())
- b = int(entry_b.get())
- g, x, y = extended_gcd(a, b)
- result_label.config(text="GCD: " + str(g) + "\nx: " + str(x) + "\ny: " + str(y))
- def solve_comparison_equation():
- a = int(entry_a.get())
- b = int(entry_b.get())
- n = int(entry_n.get())
- g, x0, _ = extended_gcd(a, n)
- # Проверяем, имеет ли право часть b сравнения быть разделена на НОД g без остатка
- if b % g != 0:
- result_label.config(text="No solutions")
- else:
- x0 = (x0 * (b // g)) % n
- solutions = [(x0 + k * (n // g)) % n for k in range(g)]
- result_label.config(text="Solutions:\n" + "\n".join(map(str, solutions)))
- def read_from_file():
- file_path = filedialog.askopenfilename()
- if file_path:
- try:
- with open(file_path, 'r') as file:
- a, b, n = map(int, file.readline().split())
- entry_a.delete(0, END)
- entry_a.insert(0, str(a))
- entry_b.delete(0, END)
- entry_b.insert(0, str(b))
- entry_n.delete(0, END)
- entry_n.insert(0, str(n))
- except ValueError:
- result_label.config(text="Invalid file!")
- def validate_input(new_value):
- return new_value.isdigit() or new_value == ""
- root = Tk()
- vcmd = (root.register(validate_input), '%P')
- Label(root, text="Number A:").grid(row=0, column=0)
- entry_a = Entry(root, validate="key", validatecommand=vcmd)
- entry_a.grid(row=0, column=1)
- Label(root, text="Number B:").grid(row=1, column=0)
- entry_b = Entry(root, validate="key", validatecommand=vcmd)
- entry_b.grid(row=1, column=1)
- Label(root, text="Number N:").grid(row=3, column=0)
- entry_n = Entry(root, validate="key", validatecommand=vcmd)
- entry_n.grid(row=3, column=1)
- Button(root, text="Calculate GCD", command=calculate_gcd).grid(row=7, column=0, columnspan=2)
- Button(root, text="Calculate GCD X and Y", command=calculate_extended_gcd).grid(row=9, column=0, columnspan=2)
- Button(root, text="Calculate GCD Diophantine", command=solve_comparison_equation).grid(row=11, column=0, columnspan=2)
- result_label = Label(root, text="")
- result_label.grid(row=15, column=0, columnspan=2)
- Button(root, text="Read from File", command=read_from_file).grid(row=13, column=0, columnspan=2)
- root.mainloop()
Add Comment
Please, Sign In to add comment