原文地址: http://blog.csdn.net/xr_acmer/article/details/10236081
大数取模模板:
while(scanf("%s", num) != EOF)
{
int len = strlen(num);
__int64 ans = 0;
for(int i = 0; i < len; ++i)
{
ans = ans*10 + (num[i]-'0');
ans %= MODZ;
}
}
针对数字位数超过最大整数范围限制的数进行取模操作,每次对一位取模
根据 (a+b)%mod=((a%mod)+(b%mod))%mod;把大数换为字符串处理,之后对每一位数字进行取模
原理(a*b)%mod=((a%mod)*(b%mod))%mod;
整数快速幂取模:(根据题意选择 long long还是mod某个数自己看着办)
(可以ans=( (ans%mod)*(base%mod) )%mod
(base=( (base%mod)*(base%mod) )%mod
int poww(int a,int b){
int ans=1,base=a;
while(b!=0){
if(b&1!=0)
ans*=base;
base*=base;
b=b>>1;
}
return ans;
}