您的位置:首页 > 其它

快速幂 快速乘法

2016-04-16 20:16 459 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: