取模和求余的区别

取模和求余的区别

算法揭秘——模运算与同余式的探索之旅

本期,我们将继续深入探讨信息学奥赛大纲中涉及的数论算法知识。

在数论的入门知识中,有一个考点特别引人注目:

模运算在实际应用中非常常见,尤其在CSP提高组2022年的阅读程序题中,还考察了负数的取模运算结果。在cmath库中,我们甚至可以使用fmod(a,b)来求两个浮点数取模的结果。

那么,模运算背后隐藏了哪些数论的奥秘呢?让我们一起来揭开它的面纱。

模运算及其奥妙

模运算是求整数a与正整数n相除的余数,记作x = a mod n。在C++编程语言中,我们用a%n来表示。这个结果x的取值范围总是在0到n-1之间,而n被称为模数。

模运算的本质可以表达为:a = q×n + x(其中0≤x<n,q是a除以n的整数部分)。这种表达方式让我们可以更方便地理解和运用模运算。

例如:11 mod 4的结果是3,而-11 mod 4的结果是1。

模运算还满足一些基本的数学性质,如:(a+b)%n=(a%n+b%n)%n、(a-b)%n=(a%n-b%n)%n以及(ab)%n=((a%n)(b%n))%n。

值得注意的是,除法运算的取模转换并不简单,它需要涉及到逆元的知识,这部分内容我们将在下一期的算法探秘中详细介绍。

同余式的魅力

当两个整数a和b对另一个正整数n取模运算的结果相我们称a和b对模数n同余,数学上记作a≡b (mod n)。这里的“≡”表示恒等于。

例如:在模7的情况下,17与3的结果相同,而-17与4的结果也相同。

同余式具有对称性和传递性。如果a与b同余,那么b与a也同余;如果a与b、c都与n同余,那么a与c也与n同余。

同余式的关键与应用

我们通过具体的问题来揭示同余式的两个关键性质。

问题一:求一个数的个位数。

这个问题实际上就是求一个数在模10意义下的同余式。我们可以利用同余的概念,找出所有小于10的正整数,然后通过同余式的加减乘性质来求解。

例如,我们可以利用同余式的乘法性质:如果a≡b (mod n),那么ka≡kb (mod n)。我们可以通过找出3的幂次方与1或-1的同余式来求解。

问题二:求一个数的最后两位数。

这个问题实际上就是求一个数在模100意义下的同余式。由于模数较大,我们可以考虑将模数分解为较小的数,并利用互质的性质来求解。

因为100可以分解为4和25的乘积,而4和25互质。所以我们可以先找出3的幂次方在模4和25下的同余式,再利用同余式的乘法性质来求解。

以上就是我们这次算法探秘的内容。希望通过这些内容,你能更深入地理解模运算与同余式的奥妙和应用。


取模和求余的区别