今科网站建设费用建设企业网站个人网上

张小明 2026/3/2 21:28:43
今科网站建设费用,建设企业网站个人网上,办公室设计图片,哪里做百度网站快速幂快速幂#xff08;Fast Exponentiation#xff09;算法解决这样一个问题#xff1a;求解自然数的指数运算。计算 #xfffd;#xfffd;a b时#xff0c;按照指数定义的朴素的方法是通过连续相乘#xff1a;#xfffd;#xfffd;#xfffd;#xfffd;⋯Fast Exponentiation算法解决这样一个问题求解自然数的指数运算。计算ab时按照指数定义的朴素的方法是通过连续相乘××⋯×⏟次abb次a×a×⋯×a​​这种方法需要进行−1b−1 次乘法当b 很大时如109109时间复杂度()O(b) 是完全不可接受的。快速幂通过巧妙的二进制分解技术将幂运算的时间复杂度从()O(b) 优化到(log⁡)O(logb)。考虑计算13a13将指数 13 用二进制表示1311012232202084011311012​23220208401因此1384018×4×0×1a13a8401a8×a4×a0×a1而8(4)2((2)2)2a8(a4)2((a2)2)2分解后的幂次很容易计算算法流程初始化结果 1从最低位开始检查指数的二进制位如果当前位为 1将当前的底数2a2x乘入结果底数不断平方不断计算0,1,2...a0,a1,a2...指数右移一位重复直到指数的最高位 1 也被遍历快速幂算法也可以从递归的角度来理解这种理解方式更加直观。{1if0(/2)2ifis even×((−1)/2)2ifis oddab⎩⎨⎧​1(ab/2)2a×(a(b−1)/2)2​if b0if b is evenif b is odd​long long quick_pow(long long base, long long exp) {long long res 1;while (exp) {if (exp 1) {res * base;}base * base;exp 1;}return res;}带模数版本更多的时候我们要求解的是modabmodm。这也可以用快速幂思想解决。快速幂模数版本的正确性基于模运算的分配律(×)mod[(mod)×(mod)]mod(a×b)modm[(amodm)×(bmodm)]modm因此我们可以直接对a 取模同时在算法每一步中我们都对中间结果取模这保证了最终结果的正确性同时防止数值溢出。不过我们不能直接对指数取模。指数b 必须保持原值因为mod≠modmodabmodmabmodmmodm当然既然复杂度是对数的所以b 大一些一般也无所谓。long long quick_pow(long long base, long long exp, long long mod) {long long res 1;base % mod; // 先取模防止初始base过大while (exp) {if (exp 1) {res (res * base) % mod;}base (base * base) % mod;exp 1;}return res;}不过在某些特定情况下我们可以使用欧拉定理来化简指数欧拉定理如果a 和m 互质即gcd⁡(,)1gcd(a,m)1那么()≡1(mod)aϕ(m)≡1(modm)其中()ϕ(m) 是欧拉函数表示小于m 且与m 互质的正整数的个数。所以当a 和m 互质时我们可以将指数对()ϕ(m) 取模modmod()modabmodmabmodϕ(m)modm这在某些数学和密码学应用中很有用但不是快速幂算法的必要部分。代码略。快速幂方法的时间复杂度是(log⁡)O(logb)循环次数等于指数的二进制位数效率极高。演示计算313mod100313mod100指数 13 1101(二进制)初始化: res 1, base 3第1轮 (最低位为1): res 1×3 3, base 3² 9第2轮 (位为0): res 3, base 9² 81第3轮 (位为1): res 3×81 243 ≡ 43, base 81² 6561 ≡ 61第4轮 (位为1): res 43×61 2623 ≡ 23结果: 3¹³ ≡ 23 (mod 100)快速乘防治溢出同样的思想也可以应用到乘法本身中。两个 32 位整数相乘范围将达到 64 位两个 64 位整数相乘范围将达到 128 位。同样大小的数无法装入正确的结果。快速乘又称龟速乘模仿快速幂的思想将乘法运算转换为加法运算。核心思路是将×a×b 看作是b 个a 相加然后利用二进制分解来优化这样就可以在中间结果下取模。对于×a×b将b 二进制分解∑0⋅2其中∈{0,1}bi0∑k​bi​⋅2i其中 bi​∈{0,1}那么××∑0⋅2∑0⋅(⋅2)a×ba×i0∑k​bi​⋅2ii0∑k​bi​⋅(a⋅2i)typedef long long ll;// 快速乘返回 (a * b) % mod防止中间过程溢出ll quick_mul(ll a, ll b, ll mod) {ll res 0;a % mod;while (b) {if (b 1) {res (res a) % mod;}a (a a) % mod; // a 2a相当于左移一位b 1;}return res;}// 使用快速乘的快速幂ll quick_pow_safe(ll base, ll exp, ll mod) {ll res 1;base % mod;while (exp) {if (exp 1) {res quick_mul(res, base, mod); // 关键替换}base quick_mul(base, base, mod); // 关键替换exp 1;}return res;}方法 时间复杂度 空间复杂度 防溢出能力直接乘法(1)O(1)(1)O(1) 无快速乘(log⁡)O(logn)(1)O(1) 有快速乘通过(log⁡)O(logn) 次加法替代(1)O(1) 次乘法实际上更慢了所以也叫做“龟速乘”这属于用时间换取了数值安全性。浮点幂如果是底数浮点指数自然数那么直接应用快速幂没有任何问题。但若指数是浮点数这个问题会麻烦的多浮点数指数无法直接进行二进制位操作且误差会随着运算的拆分不断累积。相比之下浮点幂的主要思想是利用自然对数变换法来计算浮点幂⋅ln⁡()abeb⋅ln(a)其中自然对数和指数是常见且重要的函数有快速且精确的办法来实现。常见的库如C cmath、Intel MKL、GNU Scientific Library采用此类核心思路。// 伪代码示意if (a 0.0) {if (b 0) return 0.0;if (b 0) return 1.0; // 或 NaN依标准而定return INFINITY; // 或报错}if (a 1.0) return 1.0;if (b 0.0) return 1.0;if (b 1.0) return a;result exp(b * log(a)); # 对于一般情况矩阵快速幂已知矩阵A由于矩阵乘法满足结合律指数为自然数时仍可以利用快速幂思想求解An。这最其深刻、最实用的扩展之一。它将快速幂的核心理念从标量运算成功迁移到了线性代数领域。{if0(/2)2ifis even×((−1)/2)2ifis oddAn⎩⎨⎧​I(An/2)2A×(A(n−1)/2)2​if n0if n is evenif n is odd​typedef vectorvectorlong long Matrix;Matrix matrixMultiply(const Matrix A, const Matrix B, long long mod) {int n A.size();Matrix C(n, vectorlong long(n, 0));for (int i 0; i n; i) {for (int j 0; j n; j) {for (int k 0; k n; k) {C[i][j] (C[i][j] A[i][k] * B[k][j]) % mod;}}}return C;}Matrix matrixPow(Matrix base, long long exp, long long mod) {int n base.size();// 初始化单位矩阵Matrix res(n, vectorlong long(n, 0));for (int i 0; i n; i) {res[i][i] 1;}while (exp 0) {if (exp 1) {res matrixMultiply(res, base, mod);}base matrixMultiply(base, base, mod);exp 1;}return res;}经典案例斐波那契数列的矩阵解法斐波那契数列的递推关系()(−1)(−2)F(n)F(n−1)F(n−2)可以表示为矩阵形式[()(−1)][1110]×[(−1)(−2)][F(n)F(n−1)​][11​10​]×[F(n−1)F(n−2)​]递推得到[()(−1)][1110]−1×[(1)(0)][F(n)F(n−1)​][11​10​]n−1×[F(1)F(0)​]由于我们可以快速计算矩阵的幂我们就绕过了斐波那契数列的定义使用对数次矩阵乘法的时间直接计算出了某一项。long long fibonacci_matrix(long long n, long long mod) {if (n 0) return 0;if (n 1) return 1;Matrix base {{1, 1}, {1, 0}};Matrix result matrixPow(base, n - 1, mod);return result[0][0]; // F(n)}更一般的对于 k 阶线性递推1−12−2⋯−an​c1​an−1​c2​an−2​⋯ck​an−k​
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

义乌网站建设公司代理广西钦州有做网站的公司吗

第一章:手把手教你打造专属日志分析引擎(基于Open-AutoGLM的完整实现路径)构建一个高效、智能的日志分析引擎,是现代运维系统中的关键环节。借助 Open-AutoGLM 框架,开发者可以快速集成自然语言理解能力,实…

张小明 2026/1/12 5:47:56 网站建设

全国做网站的公司c2c电子商务的网站

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式对比演示应用,展示同一个项目在传统开发环境和Docker Desktop环境下的开发流程差异。包括:环境搭建时间对比、团队协作难易度、跨平台兼容性、…

张小明 2026/1/11 5:31:45 网站建设

数据库怎么做网站网络软文营销的案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 使用Python 3.9快速开发三个不同类型的原型:1)使用新异步特性构建的简易Web API 2)利用类型提示和字典操作的数据转换工具 3)基于zoneinfo的时区转换器。每个原型应该能…

张小明 2026/1/11 5:29:43 网站建设

眉山住房和城乡建设局网站Wordpress企业主题排行

DataSphereStudio实战指南:企业级数据开发平台深度解析 【免费下载链接】DataSphereStudio WeBankFinTech/DataSphereStudio: 是腾讯金融科技的一个数据开发平台,具有强大的数据处理,分析,可视化和机器学习功能,可以用…

张小明 2026/1/26 12:35:04 网站建设

筑巢网站建设网页设计就业工资

微信机器人API开发实战:Python实现消息自动回复 微信开发框架/WTAPI框架 个人微信接口开发,个微API 个人二次开发微信API 个人微信号二次开发api协议/微信个人号开发API接口 WTAPI框架,是完整的第三方服务平台,并基于IPAD协议8.…

张小明 2026/1/12 13:05:30 网站建设

漯河北京网站建设公司站长广告联盟平台

163MusicLyrics 是一款专为音乐爱好者打造的跨平台歌词获取工具,支持网易云音乐、QQ音乐等主流平台的高质量歌词下载与管理。无论你是Windows、Linux还是macOS用户,都能享受到统一而流畅的歌词提取体验。 【免费下载链接】163MusicLyrics Windows 云音乐…

张小明 2026/1/11 5:23:38 网站建设