use fastrand; use inquire::Text; use std::time::Instant; mod algo; mod mpn; mod program; fn main() { let radix = 10; let q_text = match Text::new("Введите число q:").prompt() { Ok(text) => text, Err(_) => return, }; let q = match mpn::Number::parse(&q_text, radix as u8) { Ok(number) => number, Err(what) => { println!("{what}"); return; } }; if !algo::rabin_miller_test(&q, 10) { println!("Число q должно быть простым"); return; } let mut p; loop { let s = mpn::Number::random_num(fastrand::usize(1..=30), radix); println!("s = {s}"); p = q.clone() * s + 1.into(); if algo::rabin_miller_test(&p, 10) { break; } } println!("Сгенерированное простое p: {p}"); let t_start = Instant::now(); let g = program::find_of_order(&p, &q); let t_elapsed = t_start.elapsed(); match g { Ok(res) => { println!("Найденный элемент g: {res}"); } Err(msg) => { println!("{msg}"); return; } } println!("Операция выполнена за {} наносекунд", t_elapsed.as_nanos()); }