博客
关于我
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/

    你可能感兴趣的文章
    刚刚!频域通道注意力网络FcaNet开源了!
    查看>>
    百度视觉技术部人脸检测方向招聘实习生~北京
    查看>>
    「深度学习知识体系总结(2021版)」开放下载了!
    查看>>
    亚马逊招聘实习生,ML、CV、机器人和语音处理领域
    查看>>
    Python 使用pymongo操作mongodb库
    查看>>
    ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED
    查看>>
    c++继承与派生习题答案
    查看>>
    PROTEUS编译C51程序报L121错误的解决方法
    查看>>
    使用MQTT.FX连接EMQX服务器进行订阅发布测试
    查看>>
    阿里云物联网之三:应用开发
    查看>>
    关于日期的转化--把00:00:00转化城0.00小时!
    查看>>
    虚拟机Centos6开机黑屏解决方法
    查看>>
    mac压缩视频,压缩obs录制的视频
    查看>>
    高效人生
    查看>>
    计算机网络的层次结构
    查看>>
    linux下达梦数据库安装和使用步骤
    查看>>