求一个大数的较高次幂模运算,可以将其指数分解成二进制的形式进行分解。
举一个简单的例子:
我们要求501^13(mod 667),这时13可以分解成2进制的形式,13= 2^3 + 2^2 + 2^0。
(此图是陈恭亮《信息安全数学基础》上的图,侵删)
使用递归实现的代码如下:
#include <stdio.h>
#include <stdlib.h>
int mod_number = 0;
int test(int base,int power,int next){
if(power/2==0)
return (base*next)%mod_number;
if(power%2==1){
base = (base*next)%mod_number;
}
next = (next*next)%mod_number;
return test(base,power/2,next);
}
int main()
{
int base,power;
int result;
printf("Please input the base, power and mod_number:");
scanf("%d %d %d",&base,&power,&mod_number);
result = test(1,power,base);
printf("The result is :%d",result);
return 0;
}