取模运算和取余运算
取模运算(“Modulo Operation”)和取余运算
(“Complementation ”)两个概念有重叠的部分但又不完全一致。
主要的区别在于对负整数进行除法运算时操作不同。取模主要是用于
计算机术语中。取余则更多是数学概念。模运算在数论和程序设计中
都有着广泛的应用,从奇偶数的判别到素数的判别,从模幂运算到最
大公约数的求法,从孙子问题到凯撒密码问题,无不充斥着模运算的
身影。虽然很多数论教材上对模运算都有一定的介绍,但多数都是以
纯理论为主,对于模运算在程序设计中的应用涉及不多。对于整型数
a,b 来说,取模运算或者求余运算的方法都是:
1.求 整数商: c = a/b;
2.计算模或者余数: r = a - c*b.
求模运算和求余运算在第一步不同: 取余运算在取 c 的值时,向
0 方向舍入(fix()函数);而取模运算在计算 c 的值时,向负无穷方向
舍入(floor()函数)。
例如计算:-7 Mod 4
那么:a = -7;b = 4;
第一步:求整数商 c,如进行求模运算 c = -2(向负无穷方向舍
入),求余 c = -1(向 0 方向舍入);
第二步:计算模和余数的公式相同,但因 c 的值不同,求模时 r =
1,求余时 r = -3。