基于循环表盘的周期跳转,理解同余等价类与模算术性质
在数论及程序设计中,当处理极大数值时,通常会在模 $m$ 的意义下进行运算。模运算 (Modulo Operation) 是指两数相除所得的余数,而同余 (Congruence) 描述了余数相同的数之间的关系:
若整数 $a$ 和 $b$ 除以正整数 $m$ 的余数相同,则称 $a$ 与 $b$ 模 $m$ 同余,记作:
等价类集合:所有与 $a$ 模 $m$ 同余的整数构成一个集合,称为模 $m$ 的一个同余等价类:
模运算具有完美的加、减、乘分配律。这允许我们在中间步骤取模,以防止整数溢出:
// 模加运算
long long modAdd(long long a, long long b, long long m) {
return (a % m + b % m) % m;
}
// 模减运算 (包含负数保护)
long long modSub(long long a, long long b, long long m) {
return (a % m - b % m + m) % m;
}
// 模乘运算
long long modMul(long long a, long long b, long long m) {
return (a % m) * (b % m) % m;
}