is_even(n: u128) -> bool
{
n % 2 == 0
}
fn mod_mul(a: u128, b: u128, m: u128) -> u128
{
((a % m) * (b % m)) % m
}
fn mod_sq(a: u128, m: u128) -> u128
{
mod_mul(a, a, m)
}
fn mod_pow (num: u128, pw: u128, m: u128) -> u128
{
let mut p = pw;
let mut n = num;
let mut res: u128 = 1;
loop {
if n == 0 {
break;
}
if is_even(p) {
n = mod_sq(n, m);
p = p / 2;
}
else {
res = mod_mul(res, n, m);
p = p - 1;
}
}
res
}
fn main() {
let a: u128 = 126;
let b: u128 = 9;
let m: u128 = 123;
println!("mod_pow({a}, {b}, {m}) = {}", mod_pow(a, b, m));
}
Мне кажется или тебе нужно хотябы его скомпилить
ну допустим кажется mod_mul кривой
play.rust-lang.org
У тебя в loop условие не отрабатывает
при p == 0 зацикливается
{ на следующей строке очень напоминает код стайл майков, с плюсов или шарпа пришёл?
Обсуждают сегодня