在ACM题目中,我们常常遇到求大数的余数的题目,类似于(x`y)%p,其中p一般为素数,我们知道,在C/C++中,数据的保存是有大小限制的,比如一般来说,int的范围为-32768~+32767,那么当我们的x的y此方超过__int64所能表达的类型来说,直接求出x的y此方好像不太容易,除了自己为它另外开辟内存空间来存储外,我们还有没有办法来求这样的余数呢?
答案是有的,当然,如果p为小素数的话,完全可以通过找规律来求解,但当p为大素数时,这种方法好像就行不通了,那么请看下面这种方法:
这种方法通过递归来求解,具体的其中韵味,请大家自己去体会吧。此方法的时间复杂度为O(logy)。