Closed2
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;
}
二分累乗法
このスクラップは2023/09/10にクローズされました