题意

求\(a*b\%q(1 \leq a,b,q \leq 10^{18})\)的值。

题解

在计算机中,数字都是以二进制数表示的。例如:\(5_{10}\)的二进制数为\(101_2\)。

对于\(2\)的幂级数,都可以表示为:\(1<<n\)。

那么\(5_{10}\)就可以用多个\(2\)的幂级数表示为:

\[101_2=(1<<0)+(1<<2)
\]

\(\because\)乘法满足分配律

\(\therefore a * b\)可以表示为:

\[a*b=a*(b关于2的幂级数和)
\]

由于a和b的数据范围都会达到\(10^{18}\),若直接使用乘法操作,则会爆\(long long\),所以当两个数不能直接相乘时就考虑使用加法来实现乘法。

一个不大于\(10_{18}\)的数乘以\(2\)是不会爆\(long long\)的

因此使用加法来实现乘法是可以实现题目要求的值的。

参考代码

C++
ll qadd(ll a, ll b, ll p) {
Ll ans = 0;
while (b) {
if (b & 1) {
ans = (ans + a) % p;
}
a <<= 1;
a %= p;
b >>= 1;
}
return ans;
}

【慢速加实现64位乘法】AcWing90 64位整数乘法的更多相关文章

  1. CH 0101 - a^b / CH 0102 - 64位整数乘法 - [快速幂和快速乘]

    0101 a^b 题目链接:传送门 描述 求 a 的 b 次方对 p 取模的值,其中 1≤a,b,p≤10^9 输入格式 三个用空格隔开的整数 a,b 和 p. 输出格式 一个整数,表示 a^b mo ...

  2. CH0101 a^b、 CH0102 64位整数乘法(快速幂、快速乘)【模板题】

    题目链接:传送门    //a^b   传送门    //64位整数乘法 题目: 描述 求 a 的 b 次方对 p 取模的值,其中 ≤a,b,p≤^ 输入格式 三个用空格隔开的整数a,b和p. 输出格 ...

  3. CH0101 a^b & CH0102 64位整数乘法

    大数取模的两道题. 虐狗宝典学习笔记: 两个数值执行算术运算时,以参与运算的最高数值类型为基准,与保存结果的变量类型无关.两个32位整数的成绩可能超过int类型的表示范围,但是CPU只会用一个32位寄 ...

  4. 64位主机64位oracle下装32位客户端ODAC(NFPACS版)

    64位主机64位oracle下装32位客户端ODAC(NFPACS版) by dd 1.下载Oracle Data Access Components(ODAC) Xcopy的两个版本: x86:(我 ...

  5. 【电脑常识】如何查看电脑是32位(X86)还是64位(X64),如何知道硬件是否支持64位系统

    开始->运行->输入cmd确定->输入systeminfo 回车 待加载完成,就会看到如下信息(不同版本略有差异): 一.如何查看电脑是32位(X86)还是64位(X64) 方法2: ...

  6. 让32位Eclipse和64位Eclipse同时在64的Windows7上运行

    转自让32位Eclipse和64位Eclipse同时在64的Windows7上运行 参考这篇文章:http://wenku.baidu.com/view/57994c270066f5335a81214 ...

  7. 64位Win7安装+32位Oracle + PL/SQL 解决方法

    软件景象:64位win7.32位Oracle 10g. PL/SQL 9.0.4.1644 媒介:以前开辟用的都是32位体系,忽然换到64位上,安装景象真的有点麻烦了,尤其对于PL/SQL只支撑32位 ...

  8. C# 32位程序访问64位系统注册表

    原文:C# 32位程序访问64位系统注册表 我的上一篇文章已经阐述了“32位程序和64位程序在64位平台上读\写注册表的区别”,那么接下来将要回答上篇所留下来的一个问题:32位程序如何访问64位系统注 ...

  9. 64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考

    最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的 ...

  10. vs里32位项目和64位项目的区别

    由于操作系统内存分配的不同,导致软件开发过程中,需要编译不同版本的软件. 1.编译程序根据需要选择不同的编译环境. x86和win32为32位程序,x64为64位程序,可以选择不同的编译条件形成不同位 ...

随机推荐

  1. USB2.0 的LPM和USB3.0的LPM区别

    USB 2.0 和 USB 3.0 都支持低功耗管理机制(LPM,Link Power Management),但两者的实现方式和目标不同.以下是 USB 2.0 的 LPM 和 USB 3.0 的 ...

  2. nestjs 登录和验证码结合验证 svgCaptcha 包 session 会话标识

    // ps: 现在用户验证使用 token jwt 了 代替了 session // session 是服务器为每个用户建立的唯一标识 以区分用户 会话标识 // session 是express中的 ...

  3. 实例:([Flappy Bird Q-learning]

    目录 实例:(Flappy Bird Q-learning) 问题分析 关于Q 训练 成果 实例:(Flappy Bird Q-learning) 问题分析 让小鸟学习怎么飞是一个强化学习(reinf ...

  4. "山海经“ 讲解----线段树

    "山海经"--线段树 讲解 1.题面: http://cogs.pro/cogs/problem/problem.php?pid=775 2.题目大意及分析: i:大概就是说给了你 ...

  5. KubeSphere 社区双周报| 2024.08.30-09.12

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  6. KubeSphere 社区双周报 | OpenFunction 支持 Dapr 状态管理 | 2023.03.31-04.13

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  7. 基于pandas的数据清洗

    数据清洗是数据科学和数据分析中非常重要的一个步骤.它指的是在数据分析之前,对数据进行预处理,以确保数据的质量和一致性.使用Python的pandas库进行数据清洗是一种常见的做法,因为pandas提供 ...

  8. Linux基础-查看和设置环境变量

    一,查看环境变量 二,环境变量类型 三,设置环境变量 四,参考资料 一,查看环境变量 在 Linux中,环境变量是一个很重要的概念.环境变量可以由系统.用户.Shell 以及其他程序来设定,其是保存在 ...

  9. 推荐一个 ASP.NET Core 的轻量级插件框架

    前言 本文将介绍一个专为ASP.NET Core设计的轻量级插件框架--PluginCore,该框架不仅能够简化插件的开发与集成,还能大幅提高开发效率. 另外,还将简要介绍相关的前端技术和SDK支持, ...

  10. Proteus中单片机IO口外接LED输出低电平时,引脚却一直保持高电平的问题(已解决)

    前言 一个排阻接八个 LED,方便又省事,但出现了P1端口输出低电平后,仿真引脚却一直显示红色保持高电平不变,用电压表测量显示 2V 左右. 这是仿真的问题,在用开发板时是不会遇到的,为了仿真的显示效 ...