快速幂求余 快速乘求余

输入a,b。
快速乘 ab; 快速幂 a的b次方。
原理:1电脑存储数用二进制表示;
2:余数的三大定理:
余数的加法定理: (a+b)%c == (a%c+b%c)%c;
余数的乘法定理: (a
b)%c == ( (a%c)*(b%c) ) %c;
同余定理:(略)。

#include
int fast_mul(int a,int b,int c)//快速乘求余
{
   int ans=0;
   a%=c;
   while(b)
   {
       if(b&1)
           ans=(a+ans)%c;
       a=(a+a)%c;
       b>>=1;
   }
   return ans%c;
}
int main()
{
   int a,b,c;
   while(scanf("%d %d %d",&a,&b,&c)!=EOF)
   	printf("%d\n",fast_mul(a,b,c));
   return 0;
}



/*int fast_pow(int a,int b,int c)//快速幂求余
{
   int ans=1;
   a%=c;
   while(b)
   {
       if(b&1)
           ans=a*ans%c;
       a=a*a%c;
       b>>=1;
   }
   return ans%c;
}*/

代码来自大佬金手指敲出来的代码。

你可能感兴趣的:(快速幂求余 快速乘求余)