博客
关于我
P1226 【模板】快速幂||取余运算
阅读量:518 次
发布时间:2019-03-08

本文共 1044 字,大约阅读时间需要 3 分钟。

十倍快速幂思想可以帮助我们高效地计算大基数的幂取模,这在处理大指数问题时非常有用。下面是详细的说明和代码实现。

问题描述

给定三个整数 b, p, k,计算公式为 b^p mod k 的值。

输入格式

输入一行,包含三个整数,分别是 b, p, k。

输出格式

输出字符串,格式为 “b^p mod k= result”,其中 result 是运算结果。

示例输入

2 10 9

示例输出

2^10 mod 9=7

解题思路

为了高效计算大数的幂取模,可以采用快速幂(十倍快速幂)算法,这种方法将指数拆解为二进制形式,以便在每次迭代中减少计算量。具体步骤如下:

  • 初始化结果变量:结果变量初始化为1。
  • 处理每一位指数:从最低位开始,检查当前位是否为1:
    • 如果是,结果乘以对应的基数 a 并取模。
    • 显著平方基数 a。
  • 右移指数位:将指数右移,处理下一位。
  • 这种方法通过每次减少指数的二进制位数,使得幂取模运算的时间复杂度从 O(p) 降低到 O(log p),极大提高了计算效率。

    代码实现

    #include 
    using namespace std;typedef long long ll;ll qpow(ll a, ll b, ll p) { ll ret = 1; while (b) { if (b & 1) ret = (ret * a) % p; a = (a * a) % p; b >>= 1; } return ret;}int main() { ll a, b, c; ll d, e, f; cin >> a >> b >> c; d = a, e = b, f = c; ll ans = qpow(a, b, c); cout << d << '^' << e << ' mod ' << f << '=' << ans << endl; return 0;}

    解释

  • qpow 函数

    • 初始化 ret 为1。
    • 使用循环处理每一位指数。
    • 每次检查当前指数位是否为1,并做相应的乘法和取模。
    • 更新基数 a 为其平方取模,同时右移指数 b。
  • main 函数

    • 读取输入的三个整数 a, b, c。
    • 调用 qpow 函数计算结果。
    • 格式化输出结果为指定的字符串格式。
  • 这种方法通过快速幂减少了计算量,适用于处理大指数取模问题,保证了效率和准确性。

    转载地址:http://yiziz.baihongyu.com/

    你可能感兴趣的文章
    JavaSE总结
    查看>>
    Consul安装使用
    查看>>
    手动造轮子——基于.NetCore的RPC框架DotNetCoreRpc
    查看>>
    Python IO编程
    查看>>
    CSS入门总结
    查看>>
    使用 TortoiseGit 时,报 Access denied 错误
    查看>>
    基于 HTML5 WebGL 的污水处理厂泵站自控系统
    查看>>
    [系列] Go gRPC 调试工具
    查看>>
    django-表单之模型表单渲染(六)
    查看>>
    c++之程序流程控制
    查看>>
    一位年轻而优秀的.NET开发者的成长点滴
    查看>>
    如何使用ABP进行软件开发(1) 基础概览
    查看>>
    Spark学习之SparkStreaming
    查看>>
    AlwaysOn配置时在连接步骤时报错(35250)
    查看>>
    排序算法之总结
    查看>>
    微软云Linux服务器 Mysql、tomcat远程连接错误解决办法
    查看>>
    Python数据分析(二): Numpy技巧 (2/4)
    查看>>
    09 . Python3之常用模块
    查看>>
    Python学习笔记-StatsModels 统计回归(3)模型数据的准备
    查看>>
    Velocity.js初步
    查看>>