【算法基础:数学知识】4.4 快速幂

news2025/1/10 21:49:19

文章目录

  • 快速幂
  • 例题列表
    • 875. 快速幂⭐⭐⭐⭐⭐(重要!)
      • 代码写法1——递归
      • 代码写法2——迭代
      • 递归写法 与 迭代写法的 对比
    • 876. 快速幂求逆元🚹(需要理解逆元的概念)TODO
      • 乘法逆元介绍
      • 解法代码

快速幂

https://oi-wiki.org/math/binary-exponentiation/

在这里插入图片描述
计算过程:
在这里插入图片描述

例题列表

875. 快速幂⭐⭐⭐⭐⭐(重要!)

https://www.acwing.com/activity/content/problem/content/944/
在这里插入图片描述

求 a ^ b % p,时间复杂度是 O ( log ⁡ b ) O(\log{b}) O(logb)

代码写法1——递归

对于递归写法比较好理解
对于求 m k m o d    p m^k \mod p mkmodp 每次将 k 缩小到原来的一半。

import java.util.*;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while (n-- != 0) {
            long a = sc.nextInt(), b = sc.nextInt(), p = sc.nextInt();
            System.out.println(qmi(a, b, p));
        }
    }

    static long qmi(long a, long b, long p) {
        if (b == 0) return 1;
        long res = qmi(a, b / 2, p) % p;
        if (b % 2 == 0) return res * res % p;
        else return res * res * a % p;
    }
}

代码写法2——迭代

关于迭代版的解释看一个例子比较清楚:

在这里插入图片描述
对于求 m ^ k % p。
我们预处理出 m 2 0 、 m 2 1 、 m 2 2 、 m 2 3 . . . m^{2^0}、m^{2^1}、m^{2^2}、m^{2^3}... m20m21m22m23... 这里的每一项都是前一项的平方,对应代码中的 t = t * t % p

import java.util.*;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while (n-- != 0) {
            long a = sc.nextInt(), b = sc.nextInt(), p = sc.nextInt();
            System.out.println(qmi(a, b, p));
        }
    }

    // 迭代版快速幂
    static long qmi(long a, long b, long p) {
        long res = 1 % p, t = a;
        // 把 b 看成二进制数字,哪些位置是 1 就把它乘起来就好了
        while (b != 0) {
            if ((b & 1) == 1) res = res * t % p;
            t = t * t % p;
            b >>= 1;
        }
        return res;
    }
}

递归写法 与 迭代写法的 对比

在这里插入图片描述

876. 快速幂求逆元🚹(需要理解逆元的概念)TODO

https://www.acwing.com/problem/content/878/

在这里插入图片描述

乘法逆元介绍

https://oi-wiki.org/math/number-theory/inverse/

在这里插入图片描述

那么什么是线性同余方程?
在这里插入图片描述

就是希望找到一个数 x,使得 a / b 的结果与 a * x mod m 之后结果相同。

解法代码

在这里插入代码片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python机器学习(三)特征预处理、鸢尾花案例--分类、线性回归、代价函数、梯度下降法、使用numpy、sklearn实现一元线性回归

K-近邻算法(K-Nearest Neighboor) 特征预处理 数据预处理的过程。数据存在不同的量纲、数据中存在离群值,需要稳定的转换数据,处理好的数据才能更好的去训练模型,减少误差的出现。 标准化 数据集的标准化对scikit-learn中实现的大多数机器…

WPF实战项目十(API篇):引入工作单元UnitOfWork

1、通过github地址:https://github.com/arch/UnitOfWork,下载UnitOfWork的代码,将工作单元部分的代码引用到自己的项目,新增UnitOfWork文件夹。 2、在UnitOfWork文件夹下引用UnitOfWork下的IPagedList.cs、PagedList.cs类&#xf…

探索物联网HMI的端口转发和NAT功能

前言 端口转发和NAT功能常用于内网穿透,实现内部网络和外部网络之间的数据传输,工作人员通过外部网络便可安全访问到内网设备,实现设备的状态监测。接下来小编将为大家介绍支持端口转发和NAT功能的虹科物联网HMI是如何帮助用户实现内网穿透。…

(css)自定义登录弹窗页面

(css)自定义登录弹窗页面 效果&#xff1a; 代码&#xff1a; <!-- 登录弹窗 --> <el-dialog:visible.sync"dialogVisible"title"用户登录"width"25%"centerclass"custom-dialog":show-close"false":close-on-cli…

uniapp 条件编译

// #ifdef %PLATFORM%仅在某平台存在&#xff1b;%PLATFORM%为平台名称// #ifndef %PLATFORM%除了某平台均存在&#xff1b;// #endifendif 一定要搭配使用%PLATFORM%&#xff1a; VUE3 HBuilderX 3.2.0 详情 APP-PLUS App APP-PLUS-NVUE或APP-NVUE App nvue 页面 APP-ANDRO…

Redis八股学习记录1Redis面试常问问题from小林coding

Redis八股学习记录1Redis简介与数据结构from小林coding Redis简介Redis数据结构String底层实现List底层实现Hash底层实现Set底层实现Zset Redis线程模型Redis持久化AOF日志的实现AOF日志重写机制 RDB快照实现混合持久化Redis集群主从复制哨兵模式切片集群模式Redis的集群脑裂问…

【C++初阶】仿函数和priority_queue的模拟实现(附源码)

一.仿函数 仿函数&#xff0c;顾名思义就是模仿函数&#xff0c;它其实是一个类&#xff0c;类里面重载了运算符&#xff08;&#xff09;&#xff0c;在调用这个重载的运算符时&#xff0c;让我们感觉是调用函数一样&#xff0c;可以说相当于C语言里的函数指针一样&#xff0c…

Jenkins环境配置篇-邮件发送

作为持续集成的利器Jenkins已经得到了广泛地应用&#xff0c;仅仅作为一个工具&#xff0c;Jenkins已然有了自己的生态圈&#xff0c;支持其的plugin更是超过1300。在实际中如何使用以及如何更好地使用jenkins&#xff0c;一直是大家在实践并讨论的。本系列文章将会从如何使用j…

视频拼接得AI三维生成方案-开端(一)

想使用二维得图像生成三维得空间图像&#xff0c;英伟达有完整得方案&#xff0c;开源&#xff0c;但是三维拼接不一样&#xff0c;只需要二维&#xff0c;并且要实时&#xff0c;如何生成是我每天都在思考得东西。 cnn 提取特征器和自编码 在训练细胞神经网络时&#xff0c;问…

【C++】多态案例— —计算器类

author&#xff1a;&Calton tag&#xff1a;C topic&#xff1a;【C】多态案例— —计算器类 website&#xff1a;黑马程序员C date&#xff1a;2023年7月23日 目录 多态概要 案例实现 原理剖析 多态概要 多态是C三大特性之一&#xff08;封装、继承、多态&#xff…

FreeRTOS源码分析-5 系统延时详解

目录 1 系统延时API详解 2 相对延时与绝对延时的区别 3 相对延时与绝对延时的应用 4 系统延时函数实现原理 4.1 vTaskDelay业务流程 4.2 vTaskDelayUntil业务流程 5 任务挂起/任务恢复详解 1 系统延时API详解 TickType_t 实际上是uint32_t类型 2 相对延时与绝对延时的区…

MATLAB | 绘制scatter散点图时如何自动标注超范围散点?

本文来讲一下如何自动标注超出坐标区域范围的点&#xff0c;例如这样&#xff1a; 如图右侧的红叉代表横坐标超过范围的点的纵坐标 &#xff0c;当然下方的红叉代表纵坐标超过范围点的横坐标。 本文使用的自己编写的工具函数scatterOOR将被放在文末&#xff0c;先讲讲咋用哈&a…

【算法基础:搜索与图论】3.3 拓扑排序

文章目录 拓扑排序介绍如何构造拓扑排序&#xff08;⭐重要&#xff01;&#xff09; 例题&#xff1a;848. 有向图的拓扑序列BFS 写法构造拓扑排序 相关题目练习207. 课程表&#xff08;判断是否存在拓扑序列&#xff09;bfs 写法dfs 写法 210. 课程表 II&#xff08;找到一个…

Packet Tracer – 实施静态 NAT 和动态 NAT

Packet Tracer – 实施静态 NAT 和动态 NAT 拓扑图 目标 第 1 部分&#xff1a;利用 PAT 配置动态 NAT 第 2 部分&#xff1a;配置静态 NAT 第 3 部分&#xff1a;验证 NAT 实施 第 1 部分&#xff1a; 利用 PAT 配置动态 NAT 步骤 1&#xff1a; 配置允许用于 NAT …

transformer 笔记

目录 目前在NLP领域当中&#xff0c;主要存在三种特征处理器——CNN、RNN 以及 Transformer&#xff0c;当前Transformer的流行程度已经大过CNN和RNN&#xff0c;它抛弃了传统CNN和RNN神经网络&#xff0c;整个网络结构完全由Attention机制以及前馈神经网络组成。 Transformer…

K8s Service网络详解(二)

Kube Proxy Kubernetes 在设计之初就充分考虑了针对容器的服务发现与负载均衡机制。 Service 资源&#xff0c;可以通过 kube-proxy 配合 cloud provider 来适应不同的应用场景。 Service相关的事情都由Node节点上的 kube-proxy处理。在Service创建时Kubernetes会分配IP给Ser…

Flask 定制日志并输出到文件

Flask 定制日志并输出到文件 定制日志器flask缺省日志器配置自定义日志器 定制日志器 flask缺省日志器配置 flask自带的日志系统&#xff0c;缺省配置dictConfig()&#xff0c;但必须在Flask()应用之前使用 # flask缺省配置 from logging.config import dictConfig dictConfig…

Spring MVC-基础概念(定义+创建和连接+@RequestMappring的描述)

目录 1.什么是Spring MVC&#xff1f; 2. MVC 和 Spring MVC 的关系 3.Spring MVC 项目创建 4. RequestMappring实现用户和程序的映射 4.1 RequestMappring 注解解释 4.2 方法1: RequestMapping(“/xxx”) 4.4 RequestMapping(method xxxx, value “xxx”) 是POST/GET…

欧姆龙CX系列PLC串口转以太网欧姆龙cp1hplc以太网连接电脑

你是否还在为工厂设备信息采集困难而烦恼&#xff1f;捷米特JM-ETH-CX转以太网通讯处理器为你解决这个问题&#xff01; 捷米特JM-ETH-CX转以太网通讯处理器专门为满足工厂设备信息化需求而设计&#xff0c;可以用于欧姆龙多个系列PLC的太网数据采集&#xff0c;非常方便构建生…

请用Typescript写出20个数组方法的声明

前言 前段时间看直播看到狼叔直播驳斥”前端已死论“&#xff0c;前端死没死不知道&#xff0c;反正前端是拿不到以前那么多工资了&#xff1b;好&#xff0c;进入正题&#xff0c;狼叔在直播间提到要求前端写出20个数组上的方法&#xff0c;这确实不太简单&#xff0c;但是只…