Open2

Rust 剰余メモ

剰余 (%) の計算 メモ

とても大きい数のあまりを計算する際に、
計算途中であまりを計算しながら求めていかないとオーバーフローしてしまうので
その時の剰余メモ

足し算、引き算、掛け算に対しては、
計算結果に対して毎回 mod をかけても最後の結果は同じになります。

fn main() {
    let num1 = 1234;
    let num2 = 456;
    let mod_num = 987;

    let result1 = (num1 + num2) % mod_num;
    let result2 = ((num1 % mod_num) + num2) % mod_num;
    let result3 = ((num1 % mod_num) + (num2 % mod_num)) % mod_num;
    // 703
    println!("{}", result1);
    println!("{}", result2);
    println!("{}", result3);

    // 779
    let result4 = (num1 - num2) % mod_num;
    let result5 = mod_minus((num1 % mod_num) - num2, mod_num);
    let result6 = mod_minus((num1 % mod_num) - (num2 % mod_num), mod_num);
    println!("{}", result4);
    println!("{}", result5);
    println!("{}", result6);

    let result7 = (num1 * num2) % mod_num;
    let result8 = ((num1 % mod_num) * num2) % mod_num;
    let result9 = ((num1 % mod_num) * (num2 % mod_num)) % mod_num;
    // 114
    println!("{}", result7);
    println!("{}", result8);
    println!("{}", result9);
}

// 負の数にも対応した % 演算
fn mod_minus(val: isize, m: isize) -> usize {
    let mut res = val % m;
    if res < 0 {
        res += m;
    }
    return res as usize;
}

ログインするとコメントできます