您好,欢迎来到刀刀网。
搜索
您的当前位置:首页c++位整数乘法(龟速幂)

c++位整数乘法(龟速幂)

来源:刀刀网

题目很简单:

求 a 乘 b 对 p 取模的值。

输入格式
第一行输入整数a,第二行输入整数b,第三行输入整数p。

输出格式
输出一个整数,表示a*b mod p的值。

数据范围
1≤a,b,p≤10^18

输入样例:

3
4
5

输出样例:

2

先看代码

#include<iostream>

using namespace std;

typedef long long LL;

LL qadd(LL a,LL b,LL p)
{
    LL res = 0;
    while(b)
    {
        if(b&1) res = (res + a) % p;
        a = (a + a) % p;
        b >>= 1;
    }
    return res;
}

int main()
{
    LL a, b, p;
    scanf("%lld%lld%lld",&a,&b,&p);
    
    printf("%lld",qadd(a,b,p));
    
    return 0;
}

因为两个位的数值的数相乘会爆LL,所以用到位运算,类似与快速幂

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务