题解 | 乘方取模

乘方取模

https://www.nowcoder.com/practice/40ae98fd382e407081a530f0c2ef2cdb

解题思路

  1. 基本思路:

    • 使用快速幂算法计算
    • 通过二进制拆分指数 来减少计算次数。
    • 在计算过程中同时进行取模运算,避免溢出。
  2. 实现方法:

    • 将指数 转换为二进制形式。
    • 根据二进制位为1的位置进行累乘。
    • 每次乘法后立即取模,保证中间结果不会溢出。

代码

#include <iostream>
using namespace std;

long long quick_pow_mod(long long a, long long b, long long m) {
    long long result = 1;
    a %= m;  // 先对a取模
    
    while (b > 0) {
        if (b & 1) {  // 如果b的当前位为1
            result = (result * a) % m;
        }
        a = (a * a) % m;  // 更新a为a^2
        b >>= 1;  // b右移一位
    }
    
    return result;
}

int main() {
    long long a, b, m;
    cin >> a >> b >> m;
    cout << quick_pow_mod(a, b, m) << endl;
    return 0;
}
import java.util.*;

public class Main {
    public static long quickPowMod(long a, long b, long m) {
        long result = 1;
        a %= m;  // 先对a取模
        
        while (b > 0) {
            if ((b & 1) == 1) {  // 如果b的当前位为1
                result = (result * a) % m;
            }
            a = (a * a) % m;  // 更新a为a^2
            b >>= 1;  // b右移一位
        }
        
        return result;
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long a = sc.nextLong();
        long b = sc.nextLong();
        long m = sc.nextLong();
        
        System.out.println(quickPowMod(a, b, m));
    }
}
def quick_pow_mod(a, b, m):
    result = 1
    a = a % m  # 先对a取模
    
    while b > 0:
        if b & 1:  # 如果b的当前位为1
            result = (result * a) % m
        a = (a * a) % m  # 更新a为a^2
        b >>= 1  # b右移一位
    
    return result

if __name__ == "__main__":
    a, b, m = map(int, input().split())
    print(quick_pow_mod(a, b, m))

算法及复杂度

  • 算法:快速幂取模
  • 时间复杂度:,其中 为指数
  • 空间复杂度:
全部评论

相关推荐

04-02 10:09
门头沟学院 Java
用微笑面对困难:这里面问题还是很多的,我也不清楚为啥大家会感觉没啥问题。首先就是全栈开发实习9个月的内容都没有java实习生的内容多,1整个技术栈没看出太核心和难点的内容,感觉好像被拉过去打杂了,而且全栈基本上很容易被毙。里面能问的bug是在太多了比如L:继承 BaseMapper 可直接使用内置方法’。请问你的 BaseMapper 是如何扫描实体类注解如果瞬时产生 100 个上传任务,MySQL 的索引设计是否会有瓶颈?你做过分库分表或者索引优化吗?全栈的内容可以针对动态难点去搞,技能特长写在下面吧,你写了这么多技能,项目和实习体现了多少?你可以在项目里多做文章然后把这个放下去,从大致来看实习不算太水,有含金量你也要写上内容针对哨兵里面的节点变化能问出一万个问题,这个很容易就爆了。
提前批简历挂麻了怎么办
点赞 评论 收藏
分享
03-28 16:43
佛山大学 Java
不知该咋办:简历2.0,各位佬看看,这样可以吗查看图片
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务