《算法竞赛进阶指南》0x01 位运算-3.64位整数乘法

AcWing 90. 64位整数乘法

题目描述

求 a a a 乘 b b b 对 p p p 取模的值。

输入格式

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

输出格式

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

数据范围

1 ≤ a , b , p ≤ 10 18 1 \le a,b,p \le 10^{18} 1≤a,b,p≤1018

输入样例:
复制代码
3
4
5
输出样例:
复制代码
2
解题思路

64 64 64 位整数,可以判断使用长整型 l o n g l o n g long~long long long 或者无符号长整型

令 a = 2 a = 2 a=2, b = 34 b = 34 b=34:
2 ⋅ 34 = 2 ⋅ ( 100010 ) B 2·34 = 2·(100010)B 2⋅34=2⋅(100010)B
= 2 ⋅ ( 2 5 + 2 1 ) =2·(2^5 + 2^1) =2⋅(25+21)
= 2 ⋅ 2 5 + 2 ⋅ 2 1 =2·2^5 + 2·2^1 =2⋅25+2⋅21

参考代码
cpp 复制代码
#include<iostream>
using namespace std;
typedef long long ll;
ll a, b, p, ans;

int main(){
    scanf("%lld %lld %lld", &a, &b, &p);
    while(b){
        if(b & 1)
            ans = (ans + a) % p;
        a = a * 2 % p;
        b >>= 1;
    }
    printf("%lld", ans);
    return0;
}
相关推荐
shada5 小时前
Boost.Process v2 在旧内核上报 `assign: Bad file descriptor`
c++
木井巳5 小时前
【记忆化搜索】不同路径
java·算法·leetcode·深度优先·剪枝·推荐算法
别动我齐刘海5 小时前
ROS2 Jazzy + C++ 实战路线——基础学习2
c++·人工智能·vscode·python·学习·机器学习·机器人
怕浪猫6 小时前
从 Windows 换到 Mac 三个月,我真香了
算法·面试·架构
朝朝辞暮i6 小时前
C++第 2 课
c++
代码中介商6 小时前
C++ 预约系统实战(三):服务端实现——libevent 事件驱动与业务路由
c++·json·c/s
aichitang20247 小时前
前端小skill
前端·人工智能·算法·ai·前端框架
布莱克6057 小时前
C++中的内存分区详解
c++
All for pursuit.8 小时前
【链表-9】146.LRU缓存
数据结构·c++·算法·leetcode
木子算法8 小时前
测出来的值会抖:约束和目标带噪声时,「可行」和「更好」该怎么判
人工智能·算法·目标跟踪