信息竞赛笔记(2)––快速幂

news2024/10/7 18:26:59

目录

快速幂

定义

分析 

代码

递归实现

非递归实现(通用方法)

 模意义下取幂


快速幂

定义

快速幂,二进制取幂(Binary Exponentiation,也称平方法),是一个在O(log\: n)的时间内计算a^{n}的小技巧,而暴力的计算需要O(n)的时间。

这个技巧也常常用在非计算的场景,因为它可以应用在任何具有结合律的运算中。

                                                                                                                ––––摘于OIwiki

分析 

        我们算n个a相乘是,有时候会因为数据太大而超时,枚举的方法就不适用了.但是我们知道a^{b+c}=a^{b}\times a^{c},a^{nm}=(a^{n})^{m}.二进制取幂的想法是,我们将取幂的任务按照指数的 二进制表示 来分割成更小的任务。

        于是我们只需要知道一个快速的方法来计算上述 3 的a^{k}次幂的序列。这个问题很简单,因为序列中(除第一个)任意一个元素就是其前一个元素的平方。 

        举个栗子:

        

这么说,如果你想要计算3^{15},就可以推出以下式子:

3^{15}=3^{1}\times 3^{2}\times 3^{4}\times 3^{8}=\cdots 

根据上述举例不难发现,求大数字的幂运算已经被我们转化成了形式相同的子运算

代码

代码的话我认为有两种思路,一种是递归实现,一种是非递归实现.

递归实现

long long qkpow(long long x,long long y){
    if(y==0){
        return 1;
    }
    long long res=qkpow(x,y/2);
    if(y%2){
        return res*res*x;
    }else{
        return res*res;
    }
}

非递归实现(通用方法)

由于递归的时间太慢了,所以我们一般不用递归来求快速幂,而是用普通的位运算来求快速幂,理论上两者的时间复杂度是相同的,都是O(log\: n),但是实践上第二种要比递归快得多

long long qkpow(long long x,long long y){
  long long res=1;
  while(y>0){
    if(y&1){
        res=res*x;
    }
    x=x*x;
    y>>=1;
  }
  return res;
}

 模意义下取幂

        模意义下取幂也是一种常见的算法思路,它也可以应用在许多方面,例如它可以用于计算模意义下的乘法逆元。

        既然我们知道取模的运算不会干涉乘法运算,因此我们只需要在计算的过程中取模即可。

long long qkpow(long long x,long long y){
  long long res=1;
  while(y>0){
    if(y&1){
        res=res*x%m;
    }
    x=x*x%m;
    y>>=1;
  }
  return res;
}

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

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

相关文章

【论文】通过基准分析优化联邦人员重新识别的性能

论文链接 目录 摘要1. 绪论2. 相关工作2.1 人员重新识别2.2 联邦学习 3. 联邦 个人REID基准3.1 数据集3.2 联合方案3.3 模型结构3.4 联邦学习算法3.5 性能指标3.6 参考实现4.1 通过相机联合方案4.2 按数据集联合方案 5. 性能优化5.1 知识蒸馏5.2 权重调整5.3 知识蒸馏和体重调…

提高代码质量的秘诀:类、方法、字段和包注释

🧑‍💻CSDN主页:夏志121的主页 📋专栏地址:Java基础进阶核心技术专栏 目录 🍢 一、注释的插入 🍣 二、类注释 🍤 三、方法注释 🍥 四、字段注释 🥮 五、…

GreenPlum集群部署之抽丝剥茧

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

【stable diffusion原理解读通俗易懂,史诗级万字爆肝长文,喂到你嘴里】

文章目录 一、前言(可跳过)二、stable diffusion1.clip2.diffusion modelforward diffusion (前向扩散)逆向扩散(reverse diffusion)采样图阶段小结 3.Unet modeltimestep_embedding采用正余弦编码 三、sta…

华为OD机试真题 Java 实现【求符合要求的结对方式】【2023Q1 100分】,附详细解题思路

一、题目描述 用一个数组A代表程序员的工作能力,公司想通过结对编程的方式提高员工的能力,假设结对后的能力为两个员工的能力之和,求一共有多少种结对方式使结对后能力为N。 二、输入描述 6 2 3 3 4 5 1 6 第一行为员工的总人数&#xff…

精简总结:一文说明软件测试基础概念

基础概念-1 基础概念-2 目录 一、什么是软件测试? 二、软件测试的特点 三、软件测试和开发的区别 1、内容: 2、技能区别 3、工作环境 4、薪水 5、发展前景 6、繁忙程度 7、技能要求 四、软件测试与调试的区别 1、角色 2、目的 3、执行的阶…

Lecture 7 Deep Learning for NLP: Feedforward Networks

目录 Deep LearningFeedforward Neural Network 前馈神经网络Neuron 神经元Output Layer 输出层OptimizationRegularization 正则化Topic Classification 主题分类Language Model as Classifiers 语言模型作为分类器Word Embeddings 词嵌入Training a Feed-Forward Neural Netw…

RVOS操作系统协作式多任务切换实现-03

RVOS操作系统协作式多任务切换实现-03 任务(task)多任务 (Multitask)任务上下文(Context)多任务系统的分类协作式多任务 创建和初始化第 1 号任务切换到第一号任务执行协作式多任务 - 调度初始化和任务创建…

虚拟机-安装与使用2023

虚拟机-安装与使用 前言 一、虚拟机 1.VMware 2.Virtualbox 二、VMware 的下载 三、VMware 的安装 四、验证是否安装成功 五、运行 VMware 六、VMware 上安装其它操作系统 安装 Windows 10安装 CentOS-Linux安装 Kali-Linux 七、VMware 常用功能同步时间系统备份克隆快照内存设…

黑马Redis视频教程高级篇(多级缓存案例导入说明)

目录 一、安装MYSQL 1.1、准备目录 1.2、运行命令 1.3、修改配置 1.4、重启 二、导入SQL 三、导入Demo工程 3.1、分页查询商品 3.2、新增商品 3.3、修改商品 3.4、修改库存 3.5、删除商品 3.6、根据id查询商品 3.7、根据id查询库存 3.8、启动 四、导入商品查询…

Maven高级——私服(完结撒花!)

作用与介绍 一个公司内有两个项目组,如果其中一个开发了一个依赖tlias-utils,另一个项目组要使用的话要么就是传过来直接install放到自己的本地仓库里面的。 但是也可以搭建一个公共仓库,专门供公司局域网内部使用,也就是所谓私服。 然后在…

chatgpt赋能python:Python反向函数:在编程中的威力

Python反向函数:在编程中的威力 在Python中,反向函数是一个强大且常用的工具,可以帮助程序员在编写代码时更加高效和精确地处理数据。在本文中,我们将讨论Python反向函数的用途和实现,并详细介绍如何在您的代码中使用…

Java007——Java注释介绍

围绕以下3点介绍: 1、什么是Java注释? 2、Java注释的作用? 3、Java注释长什么样,以及怎么使用Java注释? 一、什么是Java注释? Java注释是在Java程序中用来描述代码的特殊语句。 注释被忽略并且不被编译器…

MySQL表的增删改查

目录 一、Create 1.insert 2.更新 3.替换 二、Retrieve(查找) 1.select 2.where 3. 结果排序 4. 筛选分页结果 三、Update 四、Delete 1.删除数据 2.截断表 五、聚合函数 1.count: 2.avg 3.sum 4.max 5.min 六、Group …

微信小程序开发实战 ②④(自定义 TabBar练习)

作者 : SYFStrive 博客首页 : HomePage 📜: 微信小程序 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f4…

十四、神经风格迁移

文章目录 1、神经风格迁移2、生成图片的代价函数THE END 1、神经风格迁移 \qquad 神经风格迁移就是将一幅原有的图片(content picture, C),对照着一幅风格图片(style picture, S),生成一幅新的图片(generated picture, G),如下图所示&#xf…

k8s istio 集成 多版本应用服务 和 网格监测

说明 博客文章地址:https://blog.taoluyuan.com/posts/istio-getting-started/ 本主要是内容: 使用 istioctl 安装 istio采用 istio 官方提供 的 应用bookinfo,实现多版本的服务应用部署istio 网关 gateway,vs,dr 的基本使用利用监测工具 prometheus,grafana,jaeger 查看 ist…

关于EMC Unity 存储系统DIMM内存的几个问题

下面是客户咨询最多的几个关于EMC Unity的DIMM内存的问题,供大家参考。 1. Unity存储能否自己扩容内存 有客户觉得Unity存储的内容太小,想自己扩容内存,很朴实的想法,原来是每个控制器3条16gb,能不能升级到3条32gb或…

基于Mybatis-Plus拦截器实现MySQL数据加解密

一、背景 用户的一些敏感数据,例如手机号、邮箱、身份证等信息,在数据库以明文存储时会存在数据泄露的风险,因此需要进行加密, 但存储数据再被取出时,需要进行解密,因此加密算法需要使用对称加密算法。 常…

Unreal5 第三人称射击游戏 射击功能实现1

状态机的缓存 状态机缓存功能相当于我们只需要实现一次,可以在多个地方引用,也可以在别的状态机里面使用,而不是在里面再重新写一遍相应的功能。 我们可以在基础状态机的链接拉出一条线,搜索“缓存” 第一个就是新保存的缓存姿势…