首页 > 编程语言 >快速幂算法

快速幂算法

时间:2024-10-20 19:17:17浏览次数:3  
标签:二进制 32 算法 64 计算 mod 快速 105

如何计算a^{n},(n是正整数),只需要将a*a*a*a......*a,但它的时间复杂度为O(n)。

有什么办法可以快速解决这个问题,比如说a^{64}

先通过:

a^{1}*a^{1}=a^{2}

a^{2}*a^{2}=a^{4}

a^{4}*a^{4}=a^{8}

a^{8}*a^{8}=a^{16}

a^{16}*a^{16}=a^{32}

a^{32}*a^{32}=a^{64}

这个算法的本质是倍增原理

比如说a^{105},105=1+8+32+64,所以可以写成a^{1+8+32+64},将它展开a^{105}=a*a^{8}*a^{32}*a^{64}

由于a.a^{8}.a^{32}.a^{64}很容易计算,所以只需要将它们相乘就可以,但具体是如何实现的

可以看见105的二进制有四个1,而1,8,32,64的二进制只有一个1,根据这个思想写出伪代码:

计算7^{105}

function BinExp(a,n)

r=1
while n!=0
    if n mod 2 ==1
        r = r * a
    a = a * a 

    n = [n/2]
return r

接下来看两道例题:

计算 a^{n} mod m,

一个小公式:(a*b)%m = (a%m * b%m) %m 

标签:二进制,32,算法,64,计算,mod,快速,105
From: https://blog.csdn.net/2301_81188158/article/details/142964968

相关文章

  • 动态分层强化学习(DHRL)算法
    动态分层强化学习(DHRL)算法详解一、引言在强化学习(ReinforcementLearning,RL)领域,面对复杂、大规模的任务,传统方法往往面临诸多挑战,如高维度状态空间导致的“维数灾难”、长期依赖与稀疏奖励等问题。为了克服这些挑战,分层强化学习(HierarchicalReinforcementLearning,HR......
  • 微信小程序毕业设计-基于springboot+协同过滤推荐算法的成都美食分享系统设计和实现,基
    博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业......
  • 数据结构与算法
    数据结构:研究数据在内存中存储的结构算法:实现增删改查的方法解决问题的实际方法算法的好坏评价标准:时间复杂度和空间复杂度时间复杂度:算法所用时间的一个映射时间复杂度得出的是一个数学问题数据总量x(x足够大),从而消耗的执行次数y之间存在的关系LeetCode算法题......
  • 新手必看详细搭建网站全流程教程从零开始快速入门
    1.确定网站需求网站类型:静态网站、动态网站(如博客、电商网站)功能需求:基本展示、用户注册、支付功能等预计访问量:低流量、中流量、高流量2.购买云服务器选择云服务提供商:阿里云、腾讯云、AWS等选择服务器配置:CPU:1核或2核内存:1GB或2GB存储:20GB或50GB带宽:1Mbps或5Mbp......
  • WebRTC快速上手,建立时通信流程
    目录媒体捕获创建RTCPeerConnection添加本地媒体流信令交互信令服务的实现错误处理连接状态监测使用成熟库简化开发媒体捕获首先,我们需要获取用户的媒体设备(通常是摄像头和麦克风)的视频和音频流。asyncfunctiongetMediaStream(){try{conststream=await......
  • 【多种改进粒子群算法进行比较】基于启发式算法的深度神经网络卸载策略研究【边缘计算
    ......
  • 基于C++的 BP/CNN神经网络算法(不调包)
    目前玩深度学习的小伙伴,上来就是使用现有的深度学习框架(TensorFlow,keras,pytorch,caffe),增加网络层,就像搭积木似的,看似方便,实则有时不利于个人能力发展,要知道现在公司需要的算法工程师,不仅仅只是会搭积木(这种工作,入门几个月的人就可以干了),而是要深入底层,能优化代码,能自己搭。本文......
  • qt图像算法—图像的缩放之c++实现(不调包)
     1.基本原理  图像的缩放一般使用插值算法,而本章将介绍两种常用插值算法:最临近插值法和双线性插值法  1.最临近插值法  将浮点数的位置坐标,进行四舍五入找到原图像的整型坐标即可,具体操作可见下面的公式,其中原图像坐标为(x,y),输出图像坐标为(i,j),比例系数为fx和fy。......
  • qt图像算法—图像的种子算法之c++实现(不调包)
     1.基本原理  相互连通且颜色相近的像素集合可以被看成图像的区域,而区域填充就是将每一块图像区域用指定颜色填充,填充的算法有很多种,但今天的猪脚是种子算法。在使用种子算法的时候,我们要注意两点,第一点:连通像素的搜索分为四方向和八方向,根据应用自己选择就行;第二点:边界......
  • 代码随想录算法训练营第五天| 面试题02.07.链表相交、leetcode142 环形链表II
    1.leetcode面试题02.07.链表相交题目链接:面试题02.07.链表相交-力扣(LeetCode)文章链接:代码随想录1.1代码跟着老师写的一个版本,自己能理解思路了,但是写的话可能还是有一些难#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,x):#......