《算法竞赛进阶指南》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;
}
相关推荐
一叶落43811 小时前
题目:15. 三数之和
c语言·数据结构·算法·leetcode
CoderCodingNo12 小时前
【GESP】C++七级考试大纲知识点梳理, (1) 数学库常用函数
开发语言·c++
老鱼说AI12 小时前
CUDA架构与高性能程序设计:异构数据并行计算
开发语言·c++·人工智能·算法·架构·cuda
罗湖老棍子13 小时前
【例 1】数列操作(信息学奥赛一本通- P1535)
数据结构·算法·树状数组·单点修改 区间查询
big_rabbit050213 小时前
[算法][力扣222]完全二叉树的节点个数
数据结构·算法·leetcode
张李浩13 小时前
Leetcode 15三题之和
算法·leetcode·职场和发展
2301_7938046914 小时前
C++中的适配器模式变体
开发语言·c++·算法
x_xbx14 小时前
LeetCode:206. 反转链表
算法·leetcode·链表
abant214 小时前
leetcode 138 复制随机链表
算法·leetcode·链表
ab15151715 小时前
3.17二刷基础112 118 完成进阶52
数据结构·算法