首页 > 其他分享 >快速幂

快速幂

时间:2022-12-25 16:59:00浏览次数:60  
标签:int long base ans 快速 mod

title: 快速幂
date: 2022-11-16 05:45:26
tags: 算法

本文章遵守知识共享协议 CC-BY-NC-SA ,转载时须在文章的任一位置附上原文链接和作者署名(rickyxrc)。推荐在我的个人博客阅读。

快速幂

前置知识

  • 位运算

讲解

快速幂是一种快速进行幂运算的算法

不使用快速幂的幂运算代码:

int pow(int a,int p){
    int ans = a;
    for(int i=1;i<=p;i++)
        ans*=a;
    return ans;
}

容易看出,该代码的时间复杂度为 O(p) ,而优化方法则是使用二进制的方法,枚举二进制每一位。

int pow(int a,int p){
 int ans = 1,base = a;
    while(p){
        if(p&1)
            ans*=base;
        p>>=1;
        base*=base;
    }
    return ans;
}

因为此算法枚举 p 的每一位二进制位,所以时间复杂度为 O(log p)
所以效率优于普通快速幂

关于取模

取模可以在这些地方进行:

int pow(int a,int p,int mod){
 int ans = 1,base = a;
    while(p){
        if(p&1)
            ans=(ans*base)%mod; // 这里
        p>>=1;
        base=(base*base)%mod; // 这里
    }
    return ans%mod; // 这里
}

例题

P1226-【模板】快速幂||取余运算

纯板子,直接打就行。

一定!一定!!一定!!!要开 long long !(我不说是谁 CSP-S 2022 没开 long long 导致挂掉的)

标签:int,long,base,ans,快速,mod
From: https://www.cnblogs.com/rickyxrc/p/17004224.html

相关文章

  • 高可用kube-prometheus 5分钟快速搭建
    项目地址​​prometheus-operator/kube-prometheus:UsePrometheustomonitorKubernetesandapplicationsrunningonKubernetes(github.com)​​1.初识prometheus1.......
  • WebService简单教学??SpringBoot整合CXF的快速入门??CXF发布Rest服务
    目录​##springboot整合CXF的快速入门##​​一,服务端提供webservice服务​​​1,实体类User​​​​2,webservice接口​​​​3,webservice接口的实现类​​​​4,CXF配置类​​......
  • ElasticSearch系列---【Es的快速入门文档】
    Es的快速入门文档1.对比数据库理解ElasticSearch是面向文档型数据库,一条数据在这里就是一个文档。 注意:从ElasticSearch6.X开始,一个Index下只能包含一个Type,因此,在ElasticS......
  • 可以快速搭建的免费开源项目:直播带货、富文本笔记、思维导图、声音克隆、消息推送服务
    可以快速搭建的免费开源项目:直播带货、富文本笔记、思维导图、声音克隆、消息推送服务、文档协作等等。01PureLive一个想让直播回归纯粹的项目,没有礼物、粉丝团、弹窗,只有......
  • 快速排序
    本题要求实现快速排序的一趟划分函数,待排序列的长度1<=n<=1000。函数接口定义:intPartition(SqListL,intlow,inthigh);其中L是待排序表,使排序后的数据从......
  • Go 快速入门指南 - 自增/自减 和 goto 语句
    自增和主流编程语言的自增语法不同,Go只支持 ​​i++​​​ 方式,不支持 ​​++i​​ 方式。正确packagemainfuncmain(){i:=1i++println(i)//输出2}......
  • Go 快速入门指南 - range 遍历
    概述Go特有的一种的遍历结构。它可以遍历任何一个 ​​集合(字符串、数组、切片、Map、通道等)​​​。语法上类似主流编程语言中的 ​​foreach​​ 语句,但可以获得每次......
  • Go 快速入门指南 - 可见性和作用域
    可见性包通过 ​​导出​​ 机制控制 变量、结构体、函数 等数据可见性。只有1个简单的规则: 首字母大写,可导出,首字母小写,不可导出。 也就是说,Go的访问控制只有两......
  • Go 快速入门指南 - 数组
    概述​​数组​​​ 是具有相同数据类型的一组长度固定的数据项序列,分配在连续的内存地址上。其中数据类型可以是整型、布尔型等基础数据类型,也可以是自定义数据类型。 ​......
  • Go 快速入门指南 - 切片
    概述阅读本小节之前,建议先阅读 数组 小节。​​切片​​ 是对数组的一个连续片段的引用。片段可以是整个数组,也可以是数组的一部分(例如数组的第3个元素到第8个元素......