标题:取余运算(分治策略)
问题描述:
思路:要解决这道题,首先几个数学推导公式需要理解:
接下来是代码
#include <bits/stdc++.h>
int mod(long long a,long long p, long long k)
{
if(p==1) return a%k;
if(p%2) return mod(a%k,p-1,k)*a%k; //这里稍微变形了;
else return mod((a*a)%k,p/2,k);
}
int main()
{
__int64 a, p, k;
printf("请输入三个数:");
scanf("%I64d%I64d%I64d",&a,&p,&k);
printf("a的p次方取模的值为:%I64d",mod(a,p,k));
return 0;
}
程序运行效果:
在上面过程中需要注意的问题就是数据了类型,为了防止数据溢出,这里采用long long 类型,相当于_int64,注意,为了解决编译器对数据类型的处理问题,这里输出采用%I64d的形式;