《算法竞赛进阶指南》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;
}
相关推荐
List<String> error_P1 天前
蓝桥杯最后几天冲刺:暴力大法(一)
算法·职场和发展·蓝桥杯
Tanecious.1 天前
蓝桥杯备赛:Day6-B-小紫的劣势博弈 (牛客周赛 Round 85)
c++·蓝桥杯
流云鹤1 天前
Codeforces Round 1090 (Div. 4)
c++·算法
小菜鸡桃蛋狗1 天前
C++——string(上)
开发语言·c++
wljy11 天前
第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(个人见解,已完结)
c语言·c++·算法·蓝桥杯·stl
清空mega1 天前
C++中关于数学的一些语法回忆(2)
开发语言·c++·算法
想唱rap1 天前
线程池以及读写问题
服务器·数据库·c++·mysql·ubuntu
香蕉鼠片1 天前
数据结构八股(一)
数据结构·算法
Mr_Xuhhh1 天前
从理论到实践:深入理解算法的时间与空间复杂度
java·开发语言·算法
望眼欲穿的程序猿1 天前
Vscode Clangd 无法索引 C++17 或者以上标准
java·c++·vscode