快速乘与快速幂模板
快速乘法
int fast_multiplication(int x,int y)
{
ll ans;
while(y)
{
if(y&1)//判断y是否为奇数,若是奇数,则直接加上数字
ans+=x;
y>>=1;
x<<=1;
}
}
int fast_multiplication_with_mod(int x,int y,int mod)
{
ll ans;
while(y)
{
if(y&1)//判断y是否为奇数,若是奇数,则直接加上数字
ans=(ans+x)%mod;
y>>=1;
x<<=1;
}
快速乘法的原理:
x
∗
y
=
x
∗
(
2
+
2
+
2
+
.
.
.
1
)
=
x
∗
2
(
y
/
2
个
2
)
+
x
x*y=x*(2+2+2+...1)=x*2(y/2个2)+x
x∗y=x∗(2+2+2+...1)=x∗2(y/2个2)+x
快速幂的原理:
x
y
=
(
(
x
2
)
2
)
2
(
y
/
2
个
2
)
∗
x
x^y=((x^2)^2)^2(y/2个2)*x
xy=((x2)2)2(y/2个2)∗x
int fast_pow(int x,int y)
{
ll ans;
while(y)
{
if(y&1)//判断y是否为奇数,若是奇数,则直接加上数字
ans=ans*x;
y>>=1;
x*=x;
}
}
int fast_pow_with_mod(int x,int y,int mod)
{
ll ans;
while(y)
{
if(y&1)//判断y是否为奇数,若是奇数,则直接加上数字
ans=(ans*x)%mod;
y>>=1;
x=(x*x)%mod;
}
return ans%mod;
}