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

Leetcode 50. Pow ( x , n ) 快速幂、取模 C++实现

问题:Leetcode 50. Pow ( x , n )

        实现 pow(x, n) ,即计算 x 的整数 n 次幂函数。

算法:

具体实现流程如下:

代码:

class Solution {
public:double myPow(double x, int N) {double ans = 1;long long n = N;if (n < 0) { // x^-n = (1/x)^nn = -n;x = 1 / x;}while (n) { // 从低到高枚举 n 的每个比特位if (n & 1) { // 这个比特位是 1ans *= x; // 把 x 乘到 ans 中}x *= x; // x 自身平方n >>= 1; // 继续枚举下一个比特位}return ans;}
};

取模

         某些题目,由于要计算的答案非常大(超出 64 位整数的范围),会要求把答案对 10⁹ + 7 取模。如果没有处理得当的话,会 WA(错误)或者 TLE(超时)。

        例如计算一堆数字的乘积,如果没有及时取模,乘法会溢出(例如计算结果超出 C++ 中 long long 的最大值),从而得到和预期不符的答案。

        代码实现时,上面的加减乘除通常是这样写的:

MOD = 1_000_000_007// 加
(a + b) % MOD// 减
(a - b + MOD) % MOD// 把任意整数 a 取模到 [0,MOD-1] 中,无论 a 是正是负
(a % MOD + MOD) % MOD// 乘(注意使用 64 位整数)
a * b % MOD// 多个数相乘,要步步取模,防止溢出
a * b % MOD * c % MOD// 除(MOD 是质数且 b 不是 MOD 的倍数)
a * qpow(b, MOD - 2, MOD) % MOD

其中 qpow 为 快速幂。

http://www.lryc.cn/news/458046.html

相关文章:

  • Java SE vs Java EE 与 JVM vs JDK vs JRE
  • Linux YUM设置仓库优先级
  • 做一个不断更新的链接库
  • Ping32企业加密软件:保护数据安全
  • 【Java】异常的处理-方式【主线学习笔记】
  • React modal暴露ref简洁使用
  • 小米路由器ax1500+DDNS+公网IP+花生壳实现远程访问
  • 毕设分享 大数据用户画像分析系统(源码分享)
  • 使用 Redis 实现分布式锁:原理、实现与优化
  • Android常用C++特性之std::make_pair
  • Kafka-参数详解
  • Docker Overlay2 空间优化
  • 第 3 章:使用 Vue 脚手架
  • Spring 循环依赖详解:问题分析与三级缓存解决方案
  • 爬虫prc技术----小红书爬取解决xs
  • uni-app之旅-day06-加入购物车
  • 【Kubernetes】常见面试题汇总(五十六)
  • LabVIEW激光诱导击穿光谱识别与分析系统
  • Redis的基础篇
  • java和python哪个好
  • Electron + ts + vue3 + vite
  • 《大规模语言模型从理论到实践》第一轮学习--分布式训练
  • 多模态智能
  • 【机器学习(十三)】机器学习回归案例之股票价格预测分析—Sentosa_DSML社区版
  • 大模型微调
  • 240607 继承
  • 轻松应对意外丢失:高效电脑数据恢复指南!
  • vue项目中播放rtsp视频流
  • tomcat部署web配置环境变量
  • 数据仓库技术及应用(练习1)