CH0102 64位整除算法 快速乘

题目链接http://contest-hunter.org:83/contest/0x00%E3%80%8C%E5%9F%BA%E6%9C%AC%E7%AE%97%E6%B3%95%E3%80%8D%E4%BE%8B%E9%A2%98/0102%2064%E4%BD%8D%E6%95%B4%E6%95%B0%E4%B9%98%E6%B3%95

 

快速乘模板题

ac代码:

#include<iostream>
using namespace std;
typedef long long ll;

ll a, b, p;

ll mul(ll a, ll b, ll p){
    ll ans = 0;          //这和快速幂不一样,快速幂ans=1
    while (b){

        if (b & 1) ans = (ans + a) % p;  //b&1可以取出b的最低位
        a = (a+a)% p;                    //类似快速幂,将*改为+即可
        b >>= 1;                         //舍去b的最低位
    }
    return ans;
}

int main()
{
    cin >> a >> b >> p;
    cout << mul(a, b, p) << endl;
    return 0;
}
View Code

 

posted @ 2019-03-13 20:28  looeyWei  阅读(114)  评论(0编辑  收藏  举报