summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Guschin <guschin.drew@gmail.com>2022-09-19 11:22:50 +0400
committerAndrew Guschin <guschin.drew@gmail.com>2022-09-19 11:22:50 +0400
commit313b245ba9bd4ac70c76383f0ec80a31a6cc1fa3 (patch)
tree262a56a33cd78fe21940d07af55aef33c49ecc8d
parentae088f327991ca374d914323932e99c37cb4cfdd (diff)
Принятая версия первой лабораторной
-rw-r--r--src/main.rs50
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("Можно указать только простое число!");
}