算法:快速幂ksm

为什么使用快速幂:

        假设题目要求求a的b次方。

        c/c++里并没有^运算符,所以我们第一时间可能想到使用for循环,将“a *= a”语句循环b次。但是这样时间复杂度为O(n),所以当b过大的时候,我们的程序将会非常慢,所以我们需要使用快速幂降低他的时间复杂度,时间复杂度为O(log2n)

快速幂写法:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 998244353ll ksm(ll a, ll b)
{//a = 2, b = 13//2^{1101} 13=8+4+1 2^8*2^4*2^1   原理:位运算ll res = 1;while(b){if(b&1)res = res * a % mod;//b&1等价于b%2!=0(位运算,依次比较b与1的二进制位)a *= a%mod;//2^{2^n}b >>= 1;//b>>=1等价于b/=2(位运算,将b的二进制右移一位)}return res%mod;
}int main()
{ll a, b;cin >> a >> b; 	cout << ksm(a, b);return 0;
}

 时间复杂度说明:

例:a = 2, b = 13

遍历了4次:2^2, 2^4, 2^8, 2^16。每次都以2的倍数增长,即{log2n},当指数=16时,执行了4次

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark RDD、DataFrame、DataSet比较

在Spark的学习当中&#xff0c;RDD、DataFrame、DataSet可以说都是需要着重理解的专业名词概念。尤其是在涉及到数据结构的部分&#xff0c;理解清楚这三者的共性与区别&#xff0c;非常有必要。 RDD&#xff0c;作为Spark的核心数据抽象&#xff0c;是Spark当中不可或缺的存在…

synchronized关键字的使用和原理

synchronized关键字的使用和原理 synchronized&#xff1a;对象锁&#xff0c;保证了临界区内代码的原子性&#xff0c;采用互斥的方式让同一时刻至多只有一个线程能持有对象锁&#xff0c;其它线程获取这个对象锁时会阻塞&#xff0c;保证拥有锁的线程可以安全的执行临界区内…

【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别

文章目录 &#x1f339;概念⭐作用 &#x1f384;快速入门⭐入门案例代码实现 &#x1f6f8;拦截路径&#x1f354;拦截器interceptor和过滤器filter的区别&#x1f386;登录校验 &#x1f339;概念 拦截器&#xff08;Interceptor&#xff09;是一种软件设计模式&#xff0c;…

【NSX-T】10. 搭建NSX-T环境 —— 使用 BGP 配置 Tier-0 网关

目录 10.1 创建上行链路网段10.2 创建 Tier-0 网关&#xff08;1&#xff09;设置 Interface 信息&#xff08;2&#xff09;设置 BGP添加 BGP 邻居 &#xff08;3&#xff09;设置 BGP 路由重分发设置路由重新分发 10.3 连接 Tier-0 和 Tier-1 网关10.4 使用网络拓扑验证 Tier…

《人工智能导论》知识思维导图梳理【第7章节】

文章目录 说明一 专家系统二 机器学习2.1 机器学习定义2.2 机器学习过程2.2.1 工作流程2.2.2 模型评估 2.3 机器学习分类在这里插入图片描述 机器学习部分md内容机器学习1 机器学习定义机器学习是从数据中自动分析获得模型&#xff0c;并利用模型对未知数据进行预测机器学习&am…

jpa 修改信息拦截

实现目标springbootJPA 哪个人&#xff0c;修改了哪个表的哪个字段&#xff0c;从什么值修改成什么值 import jakarta.persistence.*; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; im…

嵌入式开发、C++后端开发、C++音视频开发怎么选择?

嵌入式开发、C后端开发和C音视频开发的选择问题 近年来&#xff0c;随着互联网和物联网的快速发展&#xff0c;嵌入式开发、C后端开发和C音视频开发等职业领域也逐渐受到广泛关注。 对于有志于从事这些领域的人来说&#xff0c;如何做出选择呢&#xff1f;下面将从前景、薪酬和…

数据结构 之map/set练习

文章目录 1. 只出现一次的数字算法原理&#xff1a;代码&#xff1a; 2. 随机链表的复制算法原理&#xff1a;代码&#xff1a; 3. 宝石与石头算法原理&#xff1a;代码&#xff1a; 4. 坏键盘打字算法原理&#xff1a;代码&#xff1a; 5. 前K个高频单词算法原理&#xff1a;代…

kakfa实战指引-实时海量流式数据处理

前言 我们最终决定从头开始构建一些东西。我们的想法是&#xff0c;与其专注于保存成堆的数据&#xff0c;如关系数据库、键值存储、搜索索引或缓存&#xff0c;不如专注于将数据视为不断发展和不断增长的流&#xff0c;并围绕这个想法构建一个数据系统——实际上是一个数据架…

日本科学家们使用AI技术首次创造了世界上的心灵影像

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

圆通速递查询,圆通速递单号查询,一键复制查询好的物流信息

批量查询圆通速递单号的物流信息&#xff0c;并将查询好的物流信息一键复制出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 圆通速递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册&…

网站监控/定时任务/网站网址URL状态监控神器

源码介绍&#xff1a; 这是一款在线监控网址的源码&#xff0c;对于有多个网站的站长来说还是非常有用的。也可以做为一项收费服务对外提供。这个程序没啥问题&#xff0c;就是UI有点简单&#xff0c;不影响使用。 网站监控/定时任务/网站网址URL状态监控神器&#xff0c;可以…