From 313b245ba9bd4ac70c76383f0ec80a31a6cc1fa3 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Mon, 19 Sep 2022 11:22:50 +0400 Subject: =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=BD=D1=8F=D1=82=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B2?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=BD=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index ca9fcca..d6d7708 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,10 +12,14 @@ fn main() { struct MyApp { order: u32, lastorder: u32, + check: u32, elements: Vec, computing: bool, + computed: bool, current: u32, error: bool, + element_checked: bool, + element_true: bool, } impl Default for MyApp { @@ -23,10 +27,15 @@ impl Default for MyApp { Self { order: 29, lastorder: 0, + check: 2, elements: Vec::new(), computing: false, + computed: true, current: 1, error: false, + + element_checked: false, + element_true: false, } } } @@ -56,10 +65,46 @@ impl eframe::App for MyApp { if self.lastorder != self.order { self.lastorder = 0; self.computing = false; + self.computed = false; self.error = false; + self.element_true = false; + self.element_checked = false; } egui::Window::new("Задача №1").show(ctx, |ui| { - ui.add(egui::Slider::new(&mut self.order, 1..=4294967295).text("порядок поля")); + ui.horizontal(|ui| { + ui.label("Порядок поля: "); + ui.add(egui::DragValue::new(&mut self.order).clamp_range(1..=4294967295u32)); + }); + ui.horizontal(|ui| { + ui.label("Проверяемый элемент: "); + ui.add(egui::DragValue::new(&mut self.check).clamp_range(1..=self.order - 1)); + }); + if ui.button("Проверить элемент").clicked() { + let mut min = 0; + for power in 1..self.order { + let pow = modpow(self.check, power, self.order); + if pow == 1 { + min = power; + break; + } + } + if min == self.order - 1 { + self.element_true = true; + } + else { + self.element_true = false; + } + self.lastorder = self.order; + self.element_checked = true; + } + if self.element_checked { + if self.element_true { + ui.label("Элемент является порождающим элементом"); + } + else { + ui.label("Элемент не является порождающим элементом"); + } + } if ui.button("Рассчитать порождающие элементы").clicked() { self.elements.clear(); if is_prime(self.order) { @@ -86,12 +131,13 @@ impl eframe::App for MyApp { } if self.current == self.order - 1 { self.computing = false; + self.computed = true; } else { self.current += 1; } } - else if self.lastorder == self.order { + else if self.computed && self.lastorder == self.order { if self.error { ui.label("Можно указать только простое число!"); } -- cgit v1.2.3