快速幂×快速乘
程序员文章站
2022-03-24 15:59:15
...
快速乘的速度并不能加速两个数相乘,但是可以防止数据超过long long 而最大化速度
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 10
ll quikly1(ll ans,ll i,ll m)///快速乘
{
ll an1=0;
while(i)
{
if(i&1)
{
an1+=ans;
an1%=m;
}
ans+=ans;
ans%=m;
i>>=1;
}
return an1;
}
ll quikly2( ll i ,ll m)///快速幂
{
///2的i次方对m取模
ll ans=1;
ll x=2;
while (i ) {
if(i&1)
{
ans=quikly1(ans,x,m);
}
x=quikly1(x,x,m);
i>>=1;
}
return ans;
}
int main()
{
/// 求2的n次方对m取模
long long n , m ;
while (scanf("%lld%lld",&n,&m)!=EOF) {
if(n==1)
{
printf("%lld\n",n%m);
continue;
}
ll ans=1;
ans=quikly2(n,m);
//ans-=2;
//while(ans<0) ans+=m;
printf("%lld\n",ans);
}
}