首页 > 其他分享 >快速幂·学习笔记

快速幂·学习笔记

时间:2023-07-20 20:27:25浏览次数:44  
标签:ab kn long 学习 k2 笔记 ans 2n 快速

快速幂是一个在O(log2n)的时间内计算ab的技巧,相比直接暴力计算O(n)的时间复杂度快了许多。

原理

在计算ab的时候,将b转换为kn*2n+kn-1*2n-1+……+k2*22+k1*21+k0*20(kn,kn-1,……k2,k1,k0取0或1),运用a(m+n)=am·an

所以ab=a(kn*2n+kn-1*2n-1+……+k2*22+k1*21+k0*20=kna2^n+kn-1a2^n-1+……+k2a2^2+k1a2^1+k0a2^0

例:a13=a(1101)2=a8·a4·a1•

代码

#include<bits/stdc++.h>
using namespace std;
long long a,b;
int main(){
    cin>>a>>b;
    long long n=a,ans=1;
    while(b!=0){
        if(b&1==1){//判断b转二进制末尾是否为1
            ans=ans*n;
        }
        n=n*n//n每次平方 由一次方变为平方,再变为四次方,八次方
        b=b>>1;
    }
    cout<<ans;
    return 0;
}

 注意事项

ans,n均以指数增长,有时取模,有时要用long long或高精度

标签:ab,kn,long,学习,k2,笔记,ans,2n,快速
From: https://www.cnblogs.com/zangqy/p/17568653.html

相关文章

  • 【随便写写】小腿抽筋的原因以及如何快速恢复
    原因:人在寒冷时大脑会发出信号让全身骨骼肌阵发性收缩,以产生更多的热量维持体温(这也是为什么寒冷时我们会打寒战的原因)。当肌肉因为其他原因,比如代谢产物聚集、血管痉挛、缺钙等导致细胞兴奋性升高,若再加以寒冷刺激,就很容易发生痉挛。而疲劳正是引起代谢废物聚集的常见原因。肌......
  • webpack学习笔记
    webpack:学习目标:1知道能做什么,不能做什么学会webpack常用功能2了解大致原理知道webpack怎么工作,webpack结果文件怎么阅读3根据业务合理配置webpack 学习注意:1不要死记写法,记住规律2不要试图学会所有功能3了解原理,但没必要深入原理 课程安排:概念讲解+基本......
  • Redis学习(Redis哨兵) 持续更新中
    Redis学习(Redis哨兵)引入:master节点宕机怎么办一个可行的解决办法是:在master节点宕机之后,立刻将一个slave节点变成master节点,之后将恢复后的master节点变为slave节点那么监测和重启该怎么做,这里我们就需要哨兵哨兵的作用和原理哨兵(Sentinel)实现主从集群的自动故障恢复监......
  • 7.20 类 学习笔记
    7.20学习笔记类的复用:可以通过创建多个对象来使用同一个类,避免重复编写相似的代码。继承:子类可以继承父类的属性和方法,从而实现代码的重用和扩展性。把类赋值给一个真正的实体,之后就具备其属性定义一个非model类采矿程序及架构学习泊松比:水平方向的变形/垂直方向变形......
  • vue学习——vuex工作原理+vuex环境搭建
        vuex在index.js里引入,没在main.js里引入是因为vuex的使用必须在store之前,单纯的把Vue.use(Vuex)放在importstoreform"../store"之前并不会生效,因为执行的时候会扫描整个文件,把import都放置在一起先执行,所以单纯的移动位置没有效果所以把vuex的使用放在了inde......
  • Spring Data JPA使用规则和自动审计的学习
    一、创建项目引入依赖完整的pom文件如下所示:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http:......
  • android studio快速自动生成代码
    AndroidStudio快速自动生成代码简介在Android开发中,编写大量重复的代码是一件枯燥乏味的事情。为了提高开发效率,AndroidStudio为开发者提供了一些强大的自动生成代码的功能。这些功能可以帮助开发者快速生成常见的代码模板,减少重复性的劳动,让开发者专注于业务逻辑的实现。自动......
  • LTE学习笔记六:MIMO多天线技术
    不断提高空中接口的吞吐率是无线制式的发展目标。MIMO多天线技术是LTE大幅提升吞吐率的物理层关键技术。MIMO技术和OFDM技术一起并称为LTE的两大最重要物理层技术。MIMO技术很多原理,涉及一些线性代数知识(我也不想学怎么用latex什么的写矩阵了),内容也很多,我学习LTE主要是想了......
  • hfss学习记录3
    1 基于ADS的TDR仿真https://community.keysight.com/thread/19212,更多内容可以参考安捷伦官网。有几篇不错的文章,有空可以再看看。。另外,ads还可以根据s参数直接得出tdr,这样hfss的s参数就能导出到ads里看了。基于ADS的TDR与TDT仿真_ADS_信号完整性_射频微波_天线布局_寄生......
  • springboot学习之十一(统一返回结果)
    SpringBoot统一返回结果在实际开发中,为了降低开发人员之间的沟通成本,一般返回结果会定义成一个统一格式,具体的格式根据实际开发业务不同有所区别,但至少包括三要素:code状态码:由后端统一定义各种返回结果的状态码message描述:本次接口调用的结果描述data数据:本次返回的数据。{......