大整数取模:
输入正整数n和m,输出n mod m的值。n<=10^100,m<=10^9。
分析:把大整数写成自左向右的形式 (((1*10+2)*10)+3)*10+4
scanf("%s%d",n,&m);
int len=strlen(n);
int ans=0;
for(int i=0;i<len;i++)
ans=(int)(((long long)ans*10+n[i]-'0')%m);
printf("%d
",ans);
幂取模:
输入正整数 a,n和m,输出a^n mod m的值 。a,n,m<=10^9。
O(n):
int pow_mod(int a,int n,int m)
{
int ans=1;
for(int i=0;i<n;i++)
ans=(int)((long long)ans*n%m);
}
O(log n):
int pow_mod(int a,int n,int m)
{
if(n==0)
return 1;
int x=pow_mod(a,n/2,m);
long long ans=(long long)x*x%m;
if(n%2==1)
ans=ans*a%m;
return (int)ans;
}