快速幂——原理及实现

2023-05-16

这篇文章讲一下快速幂的问题;

首先问一个简单的问题:
23是几?
很简单啊,是不是?答案是8;
那么是怎么得来的呢?
222=8;
连续乘了3次2;

再看下边的问题:
213=?
这个其实也很简单,不就是13个2相乘吗,连续计算13次就OK啦;

但是大家有没有想过,其实我们可以减少运算次数,更快的得到答案;
怎么做呢?

先看一下216
216 = 28 * 28
对于上式,我们可以先运算8次得到28,然后两个28相乘得到216;这样计算步骤由16个2连乘的16步降到了9步(8个2连乘,再平方);
继续:28 = 24 * 24;
计算几次?
5次!;
然后,又有24 = 22 * 22;
计算3次;
当然,22就是计算1次啦;
综上:216 最少可以由4次计算得来: (((22)2)2)2 注:16=24

再看213怎样计算???
213 = 28 * 24 * 21
几次?3+3=6次;
怎么得到的呢?
在计算28的过程中可以得到24, 21,然后按个数相乘;
8, 4, 1是由13=23 + 22 + 21 得来;

大家可以发现,这样计算要比朴素的连乘计算要简单快速的多;不吗?你试试计算210000,朴素的连乘计算要10000次;而上面的方法只要大约log210000次;

这就是快速幂算法;它把幂次运算由O(n)的复杂度简化到O(logn);

下面推广到ab;
首先令b = p02k + p12k-1 + … + pk20;
ab = ap02k * ap12k-1 * … * apk20;

下面就直接上代码啦:

typedef long long ll;
const ll mod=1e9+7;
ll _power(ll a, int b)//计算a^b;
{
	ll ans=1, res=a;
	while(b){
		if(b&1) ans=ans*res%mod;
		res=res*res%mod;
		b>>=1;
	}
	return ans%mod;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速幂——原理及实现 的相关文章

  • Linux实现文件定期本地备份/异地备份/删除备份的脚本

    一 背景 1 总会出出现环境上的数据丢失 xff0c 在没有备份的情况下会非常的被动 xff0c 不管是由于病毒还是人为的原因造成的程序 数据被删除 xff0c 有时候后悔已经来不及 xff0c 不如提前做到数据的备份 xff0c 而异地备
  • strace -f strace ls 引发的问题

    strace 是Linux下常用的跟踪程序系统调用的工具 strace简介 可使用 strace lt cmd gt 来跟踪 cmd 所使用的系统调用 xff0c 原理是 strace 进程 fork 一个子进程并使用 ptrace 系统调
  • Ubuntu22.04搭建Pytorch框架深度学习环境+安装Miniconda+安装CUDA与cuDNN

    Linux搭建深度学习环境 以Ubuntu为例 xff0c 从零搭建Pytorch框架深度学习环境 1 Ubuntu安装 1 1 系统下载 访问地址ubuntu官网 1 2 启动盘制作 访问ultraiso官网 1 2 1打开镜像 1 2
  • ARM 立即寻址之立即数的形成 —— 如何判断有效立即数

    依据指令中给出的操作数的不同格式 xff0c ARM 指令系统具有 8 种常见的寻址方式 我们这次就来讨论一下立即寻址 文章目录 立即寻址的特点立即数形式合法立即数立即寻址机器指令格式指令解析判断方法例子 0x0000f200例子 0x23
  • 调用函数返回一个场景renderer并实现多场景在同一窗口显示

    问题 xff1a 函数调用想要返回renderer场景 智能指针类型同样也可以作为函数的返回值 正确的写法类似 xff1a vtkSmartPointerMyFunction vtkSmartPointer myObject 61 vtkS
  • 完美解决Python与anaconda之间的冲突问题,你值得拥有

    anaconda指的是一个开源的Python发行版本 xff0c 其包含了conda Python等180多个科学包及其依赖项 因为包含了大量的科学包 xff0c Anaconda 的下载文件比较大 xff08 约 515 MB xff09
  • win10和linux关闭端口的命令

    win10的相关命令 1 查 xff1a netstat ano findstr 8080 2 杀 xff1a taskkill PID 5616 F 也可以使用netstat ano 查看所有的端口 netstat命令详解 xff1a n
  • nmap

    nmap nmap 简介 xff1a namp也称Network Mapper 是一款多平台的网络连接扫描软件 xff0c 可以探测计算机网络上的主机和服务 在渗透初期为了绘制目标网络拓扑图 xff0c 需要到Nmap对目标网络发送特定的数
  • 日期和时间格式

    时间和日期格式 span class token keyword import span java span class token punctuation span util span class token punctuation sp
  • JDBC优化

    三层架构 JDBC事务 DBUtils 今日内容 1 三层架构 2 三层架构结合事务 3 ThreadLocal解决事务问题 4 DAO通用封装方法 5 DbUtils的使用 ooOoo o8888888o 88 34 34 88
  • 关于x86_64和x32和x86和-386和32位还是64位的区分 指令集的学习

    这里写自定义目录标题 一 xff0c 查到的知识查看linux内核信息查看linux版本信息查看当前的系统位数其他搜索到的信息 指令集和指令集架构的区分 关于x86 64和x32和x86和 386和32位还是64位的区分 一 xff0c 查
  • C++并发编程

    C 43 43 11多线程 xff1a 1 多线程概念 C 43 43 11新增了对多线程的支持 xff0c 提供了 lt atomic gt lt mutex gt 和 lt thread gt 初步支持 xff0c 但仍不完美 使用并发
  • go语言入门二 代码试验 api在线编程

    试验 一个试验代码 span class token comment 要求开发一个hello go程序 span span class token keyword package span main span class token key
  • vscode go 2022-3-20最新测试的插件安装失败的解决办法

    前期准备工作 可以直接看最下面 xff0c 我有把bin中的exe文件放到网盘 tools文件也放网盘了 伸手党请帮忙点个赞 环境变量的配置 xff0c 直接上图吧 xff0c 今天配置这玩意太心累了 高级系统设置 环境变量的配置 还有一个
  • go语言import报错处理

    import 认识 go的import有两种形式 第一种是GOPATH下项目文件管理 第二种是Go Modules 初学状态我用的vscode 在两个文件夹中调用全局变量 在地址引用时出现错误 通过查询知道了两种方法之间的区别就在与GO11
  • MYSQL多表查询面试题三

    1 显示所有员工的姓名 xff0c 部门号和部门名称 span class token keyword SELECT span e span class token punctuation span last name span class
  • 学习日志以及日志的前世今生

    先看这个链接 https www cnblogs com lalalazar p 15694889 html 提到log4j就不得不提其主要贡献者 xff0c ceki gulcu 从1996年开始出来日志 简单总结 log4j 最早出现
  • 理解匿名内部类和lambda表达式和stream流的使用方法

    1 概念 我这里理解的来源1 韩顺平老师的30天学java的课件中的概念 一个类的内部又完整的嵌套了另一个类结构 xff0c 被嵌套的类策划归纳为内部类 xff08 inner class xff09 嵌套其他类的类称为外部类 xff08
  • nginx安装 nginx安装报403错误

    致敬 xff01 第二次安装nginx 第一次安装后 xff0c 放入页面 xff0c 前端图片总是不出来 经过多次配置nginx conf文件还是不出来 xff0c 只得放弃make编译安装形式 xff0c 从新安装 先卸载上次安装 xf
  • 3D slicer编译(Windows)

    3D slicer编译 xff08 Windows xff09 1 安装依赖2 设置源文件目录和构建目录3 配置和构建slicer4 调试参考资料 1 安装依赖 我的安装依赖 xff1a Git version xff1a 2 33 1 Q

随机推荐

  • Cityscapes数据集转换成COCO类型和VOC类型

    本来想用本数据集拿来做基线测试 xff0c 突然发现gtFine里面没有适合我小白看的xml或txt 十分痛苦 看了许多帖子 终于找到一位好心博主整理的内容 按照流程应该最后成功了 想必从coco转成其他数据类型 脚本应该很多了 在此附上某
  • 虚拟机Linux磁盘扩容

    按照该方式 xff0c 虚拟机磁盘成功扩容 注意 xff1a 有快照的虚拟机无法直接扩容 xff0c 建议先备份 xff0c 再删除快照 xff0c 进行扩容 xff0c 以防万一 xff01 xff01 xff01 1 关闭虚拟机 xff
  • 单片机利用Proteus进行仿真点亮一个LED灯(C语言和汇编语言)

    Proteus仿真图 xff1a c语言程序 xff1a span class token macro property span class token directive keyword include span span class
  • 搭建hadoop开源版本分布式集群(无高可用)

    搭建hadoop开源版本分布式集群 xff08 无高可用 xff09 在搭建之前需要安装jdk xff0c 并设置环境变量 最低要求版本jdk1 8 1 修改各个节点名称 vim etc hostname 修改之后reboot重启生效 2
  • visual studio2019+vcpkg管理第三方库(含使用Git管理工具下载vcpkg方法,已解决)

    问题简述 通常在使用vs做项目的时候要用到一些第三方库 xff0c 我在学习Eigen的过程中由于没有安装第三方库便遇到了这样的一个问题 xff1a 无法打开源文件 34 eigen3 Eigen Dense 34 如图1所示 xff1a
  • 【更新多方案】青龙面版解决服务异常,请手动执行ql check检查服务状态

    有问题可以加群讨论讨论下 113815925 简单粗暴解决问题不想啰嗦一大堆 1 检测青龙环境并修复 ql check 2 检测依赖文件并修复 docker exec it qinglong bin bash ql 3 更新并重启青龙 ql
  • 【需要magisk面具】旧手机搭建青龙面版,本地跑青龙【等我有时间整合下机器人以及内网穿透】

    本教程所需113815925群内下载 前期准备 首先在旧手机上安装BusyBox magisk juicessh三个软件 xff0c 网上都能搜索到 BusyBox是一个集成了一百多个最常用 linux 命令和工具的软件 xff0c 用于给
  • 【免root】旧安卓手机本地运行青龙面板[termux高级终端]

    前期准备 下载zerotermux和青龙恢复包并且安装zwerotermux 软件需要后台运行所以我们要打开设置 xff0c 找到电池 xff0c 点击后台耗电管理找到zerotermux然后允许软件后台高耗电 xff08 每部手机设置不同
  • 青龙面版跑QQ阅读

    手机写的教程将就看 本博客QQ群 113815925 可以的话填我的邀请码 121519165 谢谢 首先我们得去配置17行设置下拉取后缀sh 然后就是拉库 ql raw https ghproxy com https raw github
  • 利用青龙面版实现cpolar穿透内网

    之前的钉钉穿透 xff0c 被你们薅跑了 cpolar内网穿透拉库 ql raw https ghproxy com https raw githubusercontent com jiankujidu cpolar main nwct c
  • 随身WIFI debian安装docker

    安装docker环境 1 切换root sudo i 2 更新源 xff1a sudo apt get update 3 安装工具 xff1a sudo apt get install curl wget apt transport htt
  • 随身WIFI刷入debian

    本文使用的型号为UFI001 必须刷入boot xff0c 有adb才能玩 xff0c 也可以直接刷入 其他型号请参考大佬的文章 https www kancloud cn handsomehacker openstick 2636505
  • 傻妞恢复包带短信登录(迟来的恢复包)

    傻妞恢复包 magisk模块就不启动青龙 xff0c 添加下容器就可以 目录全部在 data data com termux files home local share tmoe linux containers proot ubuntu
  • A1153

    题意 xff1a 输入准考证号 xff0c 考试分数 然后输入查询命令 xff0c 对每个命令按照要求模拟输出 思路分析 xff1a 命令为1 xff1a 表示查询考 级的所有记录 xff0c 按照成绩从大到小排名 xff0c 成绩相同则按
  • 电脑显示WiFi已连接,但无法访问internet怎么解决?

    我在玩游戏的时候电脑突然卡崩了 xff0c 我无奈的重启了一下 xff0c 结果电脑重启后连不上网了 xff0c 我开始以为还在重新连接 xff0c 在等待 xff0c 过了好久才发现其实早就连上wifi了 xff0c 但显示无法连接int
  • Python-Django-模型

    一 ORM 模型介绍 1 ORM 模型 对象关系映射 xff08 英语 xff1a Object Relational Mapping xff0c 简称ORM xff0c 或ORM xff0c 或OR mapping xff09 xff0c
  • LeetCodeWeeklyContest-159

    最近看了篇文章 xff0c 文章里说 希望你身边能有个比你聪明五倍 xff0c 但却比你还努力十倍的人 倍数虽然有些夸张 xff0c 但是这个思想还是能get到的 5230 缀点成线 在一个 XY 坐标系中有一些点 xff0c 我们用数组
  • 获取安卓设备唯一标识方法总结

    安卓设备的唯一标识的方法并不唯一 xff0c 也没有哪种方法能够适用于所有的Android设备 xff0c 下面列出几种常见的方式 xff0c 可以根据需要选择 1 IMEI 码 IMEI xff08 国际移动设备识别码 xff09 唯一编
  • Anaconda安装及环境变量配置(Ubuntu)

    安装Anaconda 下载软件 Anaconda下载地址打开终端 xff0c 进入到安装包的存放路径输入命令 xff1a span class token function bash span namexxxxx span class to
  • 快速幂——原理及实现

    这篇文章讲一下快速幂的问题 xff1b 首先问一个简单的问题 xff1a 23是几 xff1f 很简单啊 xff0c 是不是 xff1f 答案是8 xff1b 那么是怎么得来的呢 xff1f 222 61 8 xff1b 连续乘了3次2 x