在SICP中,1.2.6 实例:素数检测部分定义了过程expmod计算一个数的幂对另一个数取模。这个过程中涉及到数论的基础,不是很容易懂。本文详细分析其中的细节。
要研究清楚这个函数的细节,首先要搞清楚何谓取模,取模的性质。
a对b取模,就是求a除以b的余数。可以总结出如下3个性质:
性质1
a M O D b = r a\,MOD\,b=r aMODb=r
n a M O D b = n r M O D b na\,MOD\,b=nr\,MOD\,b naMODb=nrMODb
证明
a = k b + r a=kb+r a=kb+r
n a = n k b + n r na=nkb+nr na=nkb+nr
n a M O D b = ( n k b + n r ) M O D b = n r M O D b na\,MOD\,b=(nkb+nr)\,MOD\,b=nr\,MOD\,b naMODb=(nkb+nr)MODb=nrMODb
所以
a 2 M O D b = a r