diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2022-09-19 11:22:50 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2022-09-19 11:22:50 +0400 |
| commit | 313b245ba9bd4ac70c76383f0ec80a31a6cc1fa3 (patch) | |
| tree | 262a56a33cd78fe21940d07af55aef33c49ecc8d | |
| parent | ae088f327991ca374d914323932e99c37cb4cfdd (diff) | |
Принятая версия первой лабораторной
| -rw-r--r-- | src/main.rs | 50 |
1 files changed, 48 insertions, 2 deletions
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<u32>, 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("Можно указать только простое число!"); } |