当前位置: 首页 > news >正文

算法题(160):64位整数除法

审题:

本题需要我们计算出数量级巨大的(a*b)%p的值,其中a,b,p的数据类型都是longlong

思路:

方法一:暴力解法

我们可以直接计算a*b的结果,然后再取余p。但是由于他们的数量级过高,计算时空间可能会溢出,所以本方法无效

方法二:倍增思想

其实a*b可以看成b个a相加(a+a+a....),所以我们可以利用倍增的思想来计算。

图示:

这里要不要加当前的倍增结果就可以通过看b的二进制表示对应位数来确定了

如果对应位数为1说明要加,否则则不需要。

且计算倍增结果和添加到answer的时候都进行取余,可以保证不溢出

解题:
 

#include<iostream>
using namespace std;
typedef long long ll;
ll answer;
ll func(ll a, ll b, ll p)
{ll x = a;while (b){if (b & 1) answer = (answer + x)%p;x = (x + x) % p;b = b >> 1;}return answer;
}
int main()
{ll a, b, p;cin >> a >> b >> p;cout << func(a,b,p) << endl;return 0;
}

P10446 64位整数乘法 - 洛谷

相关文章:

  • 编译器对齐机制与硬件浮点计算详解
  • 19-项目部署(Linux)
  • 在 Linux 上安装 Nmap 工具
  • Linux-GCC、makefile、GDB
  • Linux账号和权限管理
  • U盘挂载Linux
  • 道可云人工智能每日资讯|北京农业人工智能与机器人研究院揭牌
  • LabelMe安装踩坑
  • 电子电路:什么是晶振?
  • python第31天打卡
  • [野火®]《FreeRTOS 内核实现与应用开发实战—基于STM32》笔记
  • cf1600-1900每天刷2-3道打卡(2)
  • 黑盒(功能)测试基本方法
  • LARWINER拉威兒艺术珠宝携手郭培GUOPEI高定服装 共谱「宝光凝粹,锦绣华裳」
  • OpenCV CUDA模块图像处理------图像融合函数blendLinear()
  • ChatGPT实战嵌入式开发应用指南与代码演示
  • 2025中国主流大模型全景解析:技术路线、场景实践与生态博弈
  • docker中启动 Python 程序并调用某个模块内的函数的方法
  • centos安装locate(快速查找linux文件)
  • SMART原则讲解
  • 日志文件WordPress/网站首页seo关键词布局
  • 网站建设app小程序开发/企业如何注册自己的网站
  • 学ps做兼职的网站有哪些/站长推荐入口自动跳转
  • 风水网站开发/中国站长站
  • 360建筑网官方网站/域名查询系统
  • wordpress头像同步/网站seo优化是什么