#include <iostream>
#include <cstdio>
#include
#include <cmath>
#include <cstring>
#include<map>
using namespace std;
long long q_mul( long long a, long long b, long long mod ) //快速计算 (a*b) % mod
{
long long ans = 0; // 初始化
while(b) //根据b的每一位看加不加当前a
{
if(b & 1) //如果当前位为1
{
b--;
ans =(ans+ a)%mod; //ans+=a
}
b /= 2; //b向前移位
a = (a + a) % mod; //更新a
}
return ans;
}
long long q_pow( long long a, long long b, long long mod ) //快速计算 (a^b) % mod
{
long long ans = 1; // 初始化
while(b)//根据b的每一位看乘不乘当前a
{
if(b & 1) //如果当前位为1
{
ans = q_mul( ans, a, mod ); //ans*=a
}
b /= 2; //b向前移位
a = q_mul( a, a, mod ); //更新a
}
return ans;
}
int main( )
{
long long a, b, n;
while(cin >> a >> b >> n)
{
cout << "a*b%n = " << q_mul( a, b, n ) << endl;
cout << "a^b%n = " << q_pow( a, b, n ) << endl;
}
return 0;
}
快速幂 快速乘法
最新推荐文章于 2020-01-04 17:02:17 发布