1.快速乘
当两个大数进行相乘进行取模(a×b%c)时,运算a×b可能会爆long long的范围,这时就需要使用快速乘了。
2.原理
快速乘是利用乘法分配律将a×b分解成多个式子相加(将后面一个乘数转化为二进制的形式计算)求解。
快速乘取模公式:(a×b) Mod c = [(a Mod c)×(b Mod c)]
3.代码
#include<stdio.h>
typedef long long LL;
LL Ksc(LL a,LL b,LL c)
{
LL re=0;
while(b)
{
if(b&1)
re=(re+a)%c;
a=(a+a)%c;
b=b/2;
}
return re;
}
int main()
{
LL a,b,mod,sum;
scanf("%lld%lld%lld",&a,&b,&mod);
sum=Ksc(a,b,mod);
printf("%lld\n",sum);
return 0;
}
注意:
按位与运算(&)
按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。