use inquire::Text; use rug::{Complete, Integer}; use std::time::Instant; mod mpn; fn main() { let radix = match Text::new("Введите основание системы счисления:").prompt() { Ok(text) => text, Err(_) => return, }; let radix = match radix.parse::() { Ok(number) => { if number > 36 || number < 2 { println!("Система счисления должна принадлежать отрезку [2,36]"); return; } number } Err(_) => { println!("Основание должно быть десятичным числом"); return; } }; let a_text = match Text::new("Введите число:").prompt() { Ok(text) => text, Err(_) => return, }; let b_text = match Text::new("Введите число:").prompt() { Ok(text) => text, Err(_) => return, }; let a = match mpn::Number::parse(&a_text, radix as usize) { Ok(number) => number, Err(what) => { println!("{what}"); return; } }; let b = match mpn::Number::parse(&b_text, radix as usize) { Ok(number) => number, Err(what) => { println!("{what}"); return; } }; let a_rug = match Integer::parse_radix(a_text, radix) { Ok(parsed) => parsed.complete(), Err(_) => { println!("Не удалось считать число"); return; } }; let b_rug = match Integer::parse_radix(b_text, radix) { Ok(parsed) => parsed.complete(), Err(_) => { println!("Не удалось считать число"); return; } }; let mpn_mul_start = Instant::now(); let mpn_mul = a / b; let mpn_mul_elapsed = mpn_mul_start.elapsed(); let rug_mul_start = Instant::now(); let _rug_mul = a_rug * b_rug; let rug_mul_elapsed = rug_mul_start.elapsed(); println!("Произведение: {}", mpn_mul); println!( "Операция произведения выполнена в mpn за {} наносекунд", mpn_mul_elapsed.as_nanos() ); println!( "Операция произведения выполнена в rug за {} наносекунд", rug_mul_elapsed.as_nanos() ); }