快速幂(算法)的原理

快速幂算法

  • 快速幂
    • 数学原理
    • 算法实现
    • OJ题展示
      • 不用高精度计算
      • 二进制指数的高精度计算
      • 数学题
        • 等差数列和等比数列
        • 计数原理

快速幂

( a b ) % n (a^b)\%n (ab)%n的结果(即 a a a b b b次方,再除以 n n n得到的余数)。

利用程序求解时,可以利用循环语句,将 b b b a a a相乘,并在每次乘法运算(要防止溢出)后取模 n n n,即可求出结果,时间复杂度 O ( b ) O(b) O(b)

即使是这样简单的问题,当 b b b的取值很大时,程序的效率也不高,比如 b = 1 0 9 b = 10^9 b=109,计算机要在1s内解决一个这样的问题都比较困难。如果要求解很多个,显然会超时。因此,需要思考算法的优化问题。

利用分治思想进行优化:

b b b是偶数,则 a b = a b 2 × a b 2 a^b = a^{\frac{b}{2}}\times a^{\frac{b}{2}} ab=a2b×a2b;若 b b b是奇数, a b = a b 2 × a b 2 × a a^b = a^{\frac{b}{2}}\times a^{\frac{b}{2}}\times a ab=a2b×a2b×a(这里 b 2 \frac{b}{2} 2b取下整)。即我们只要求出 a b 2 a^{\frac{b}{2}} a2b,然后再通过一次乘法运算,即可求出 a b a^b ab。继续将 b 2 \frac{b}{2} 2b分解成 b 4 \frac{b}{4} 4b b 8 \frac{b}{8} 8b……最终 b b b会变成1,并且只需要 [ l o g 2 b ] [log_2b] [log2b]次就可以将 b b b变成1。我们称这种快速计算幂运算的方法为快速幂算法

数学原理

在做这块的题的时候被极致的数值给震撼(ex)了。所以十分有必要补一下相关的数学知识来应对极致的数值。毕竟不可能每个题的每个步骤都用高精度计算代替。

《深入浅出程序设计》进阶篇的部分参考(侵权删,为方便复习删减部分):

定义1:对于整数 a a a b b b,满足 b > 0 b>0 b>0,则存在唯一的整数 q q q r r r,满足 a = b q + r a = bq + r a=bq+r,其中 0 ≤ r < b 0 \leq r < b 0r<b。其中称 q q q为商、 r r r为余数。余数用 a m o d b a\mod b amodb或者 ( a % b ) (a \% b) (a%b)表示。

带模算式的运算:
(1) ( a + b ) m o d M = ( a m o d M + b m o d M ) m o d M (a + b) \mod M = (a \mod M + b \mod M) \mod M (a+b)modM=(amodM+bmodM)modM
(2) ( a − b ) m o d M = ( a m o d M − b m o d M ) m o d M (a - b) \mod M = (a \mod M - b \mod M) \mod M (ab)modM=(amodMbmodM)modM

即使 a ≥ b a \geq b ab,也不能保证 a m o d M ≥ b m o d M a \mod M \geq b \mod M amodMbmodM,假如12个苹果分给5个小朋友剩下2个,而分15个苹果就不剩了。

在c++中,当 a % M − b % M a \% M - b \% M a%Mb%M小于0时, ( a % M − b (a \% M - b % M) \% M (a%Mb的结果是负数,那么就可以写成 ( a % M − b % M + M ) % M (a \% M - b \% M + M) \% M (a%Mb%M+M)%M以保证结果是非负数。

(3) ( a × b ) m o d M = ( ( a m o d M ) × ( b m o d M ) ) m o d M (a \times b) \mod M = ((a \mod M) \times (b \mod M)) \mod M (a×b)modM=((amodM)×(bmodM))modM

类似乘法结合律,可带入定义证明。除法见乘法逆元。

定义2:若两数 x x x y y y除以 b b b的余数相等,则称 x x x y y y b b b同余,记作 x ≡ y ( m o d b ) x \equiv y \pmod b xy(modb)

依据这种分类方法,可以得到同余的以下几个最基础的性质。

  1. 反身性: x ≡ x ( m o d M ) x \equiv x \pmod M xx(modM)
  2. 对称性:若 x ≡ y ( m o d M ) x \equiv y \pmod M xy(modM),则 y ≡ x ( m o d M ) y \equiv x \pmod M yx(modM)
  3. 传递性:若 x ≡ y ( m o d M ) x \equiv y \pmod M xy(modM) y ≡ z ( m o d M ) y \equiv z \pmod M yz(modM),则 x ≡ z ( m o d M ) x \equiv z \pmod M xz(modM)

根据上述模运算的计算方法,同余还有以下性质:
4. 同加性:若 x ≡ y ( m o d M ) x \equiv y \pmod M xy(modM),则 x + z ≡ y + z ( m o d M ) x + z \equiv y + z \pmod M x+zy+z(modM)
5. 同乘性:若 x ≡ y ( m o d M ) x \equiv y \pmod M xy(modM),则 x × z ≡ y × z ( m o d M ) x\times z \equiv y\times z \pmod M x×zy×z(modM)
6. 同幂性:若 x ≡ y ( m o d M ) x \equiv y \pmod M xy(modM),则 x n ≡ y n ( m o d M ) x^n \equiv y^n \pmod M xnyn(modM)

同余还有以下这个非常重要的性质:
7. x ≡ y ( m o d b ) ⇔ b ∣ ( x − y ) x \equiv y \pmod b \Leftrightarrow b | (x - y) xy(modb)b(xy)

以分苹果的例子解释这个性质。 12 12 12个苹果分给 5 5 5人,最后剩下 2 2 2个; 22 22 22个苹果分给5
人,依然剩下 2 2 2个。也就是 22 ≡ 12 ( m o d 5 ) 22 \equiv 12 \pmod 5 2212(mod5)。可以发现, 22 22 22个苹果比12个苹果多出来的那些苹
果,一定平分到所有 5 5 5个小朋友手上,每个小朋友多分到 2 2 2个苹果,一共多了 5 × 2 = 10 5\times2 = 10 5×2=10个苹果;如
果每个小朋友多分到 x x x个苹果,那么总共就多了 5 x 5x 5x个苹果,并且 5 5 5一定是 5 x 5x 5x的一个约数,也可
表示为 5 ∣ ( 22 − 12 ) 5 | (22 - 12) 5∣(2212)。类似地,也可证明右式可以推导出左式。

模运算的其他乘法性质(忘了从哪里抄来的):

  1. a ≡ b ( m o d m ) a \equiv b \pmod{m} ab(modm) c ≡ d ( m o d m ) c \equiv d \pmod{m} cd(modm),那么 a c ≡ b d ( m o d m ) ac \equiv bd \pmod{m} acbd(modm)
  2. 分配律: ( a + b ) × c m o d m = ( ( a × c ) m o d m + ( b × c ) m o d m ) m o d m (a + b)\times c\bmod m=((a\times c)\bmod m+(b\times c)\bmod m)\bmod m (a+b)×cmodm=((a×c)modm+(b×c)modm)modm

根据结合律可以了解到,快速幂算法是合理的,对中间结果取模不会影响最终结果。

算法实现

快速幂算法的非递归实现:

int quickPow(int a, int b, int n) {//int可能存在负数的情况int ret = 1;while (b) {if (b % 2 == 1)//b的中间值是奇数的情况ret = ret * a % n;//*作为乘法的优先级高于%a = a * a % n;b = b / 2;}return ret;
}

比如 a 13 a^{13} a13,因为 1 3 ( 10 ) = 110 1 ( 2 ) 13_{(10)}=1101_{(2)} 13(10)=1101(2),所以 a 13 = a 8 × a 4 × a a^{13}=a^8\times a^4\times a a13=a8×a4×a

可以看到, a 13 a^{13} a13可以按照 13 13 13的二进制数进行拆分:

请添加图片描述

根据公式 ( a × b ) m o d M = ( ( a m o d M ) × ( b m o d M ) ) m o d M (a \times b) \mod M = ((a \mod M) \times (b \mod M)) \mod M (a×b)modM=((amodM)×(bmodM))modM,即使每个 a a a的若干整数次幂都对 n n n求模, ( a 13 ) % n (a^{13})\%n (a13)%n的结果依旧不会有影响。

这个特性同样可以应用到实际应用中:比如指数有200位,此时就可以先将指数转换成二进制,再进行计算。

如果运算过程中出现负数,可尝试将int换成long longunsigned long long

long long的存储范围是 [ − 2 63 , 2 63 − 1 ] [-2^{63},2^{63} - 1] [263,2631],即 [ − 9223372036854775808 , 9223372036854775807 ] [-9223372036854775808,9223372036854775807] [9223372036854775808,9223372036854775807]

unsinged long long的存储范围是 [ 0 , 2 64 ] [0,2^{64}] [0,264],即 [ 0 , 18446744073709551615 ] [0,18446744073709551615] [0,18446744073709551615]

如果用了unsigned long longlong long也溢出的话,只能用高精度计算题。

快速幂算法的递归实现(一般用不上):

int quickPow(int a, int b, int n) {if (b == 1)return a;if (b % 2 == 0) {//b是偶数int t = quickPow(a, b / 2, n);return t * t % n;}else {//b是奇数int t= quickPow(a, b / 2, n);t = t * t % n;t = t * a % n;return t;}
}

一般更建议使用非递归模式,可以减少函数栈帧的压力。

但无论是哪一种,都要注意用模运算的性质来降低数值。

快速幂算法将复杂运算拆分成能用已知符号表示的运算,配合高精度计算,能处理更大数量级的幂运算和模运算。

OJ题展示

不用高精度计算

题目链接:1616:A 的 B 次方

这题的题意就是求 a b ( m o d m ) a^b\pmod m ab(modm)。但数据量可能太大,所以每一步都要用long long的同时,还要利用模运算的乘法性质对结果进行限制。

AC参考程序:

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS 1
#endif#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;typedef long long ll;ll quickPow(ll a, ll b, ll m) {ll res = 1LL;//让计算机将1看做long long型数据a %= m;while (b) {if (b % (2LL))res = res * a % m;a = a * a % m;b /= 2LL;}return res;
}void ac() {ll a, b, m;cin >> a >> b >> m;cout << quickPow(a, b, m);
}int main() {ac();return 0;
}

二进制指数的高精度计算

题目链接:1234:2011

这个OJ题要求的 ( 201 1 b ) % 10000 (2011^b)\%10000 (2011b)%10000的指数部分 b b b有200位,c语言没有任何内置类型能存储这么庞大的数据,所以可以用高精度计算将指数转换成二进制。

之后就是快速幂算法:

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS 1
#endif#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;void div2(string& st) {int num = 0;string ans;for (auto& a : st) {num = num * 10 + a - '0';ans = ans + (char)((num / 2) + '0');num %= 2;}while (ans[0] == '0' && ans.size() > 1)ans.erase(0, 1);st = ans;
}int quickPow(int a, string b, int n) {int res = 1;for (size_t i = b.size() - 1; i != -1; i--) {if (b[i] - '0')res = res * a % n;a = a * a % n;}return res;
}void ac() {int k;string num, bnum;//binary num,二进制cin >> k;while (k--) {cin >> num;while (num != "0") {//高精度求二进制 if ((num[num.size() - 1] - '0') % 2)bnum = '1' + bnum;//栈的思想应用elsebnum = '0' + bnum;div2(num);}cout << quickPow(2011, bnum, 10000) << endl;//快速幂算法bnum.clear();}
}int main() {ac();return 0;
}

数学题

快速幂算法更多的还是用来解数学题。数学的难度取决于出题人的心情。

等差数列和等比数列

题目链接:1615:【例 1】序列的第 k 个数

高中数学题知识点复习(公式参考):

  1. 等差数列的公差: a n + 1 − a n = d a_{n+1}-a_n=d an+1an=d d d d为常数。

  2. 等差中项: a m + n 2 = a m + a n 2 a_{\frac{m+n}{2}}=\frac{a_m+a_n}{2} a2m+n=2am+an

  3. 等差数列 { a n } \{a_n\} {an}的通项公式: a n = a 1 + ( n − 1 ) d = a m + ( n − m ) d a_n=a_1+(n-1)d=a_m+(n-m)d an=a1+(n1)d=am+(nm)d n > m ≥ 1 n>m\geq 1 n>m1

  4. 等差数列的前 n n n项和公式: S n = ( a 1 + a n ) × n 2 S_n=\frac{(a_1+a_n)\times n}{2} Sn=2(a1+an)×n,通项公式可代入。

  5. 等比数列的公比: a n + 1 a n = q \frac{a_{n+1}}{a_n}=q anan+1=q q ≠ 0 q\neq0 q=0

  6. 等比中项: G = a n ⋅ a m G=\sqrt{a_n\cdot a_m} G=anam

  7. 等比数列 { a n } \{a_n\} {an}的通项公式: a n = a 1 q n − 1 = a m q n − m a_n=a_1q^{n-1}=a_mq_{n-m} an=a1qn1=amqnm n > m ≥ 1 n>m\geq 1 n>m1

  8. 等比数列的前 n n n项和公式: S n = a 1 ( 1 − q n ) 1 − q = a 1 − a n q 1 − q S_n=\frac{a_1(1-q^n)}{1-q}=\frac{a_1-a_nq}{1-q} Sn=1qa1(1qn)=1qa1anq q ≠ 1 q\neq1 q=1

  9. 等差数列乘等比数列组成的新数列 { a n ⋅ b n } = ( A n + B ) q n − 1 \{a_n\cdot b_n\}=(An+B)q^{n-1} {anbn}=(An+B)qn1的前 n n n项和公式:
    S n = ( k ⋅ n + m ) ⋅ q n − m S_n=(k\cdot n+m)\cdot q^n-m Sn=(kn+m)qnm k = a q − 1 , m = b − k q − 1 k=\frac{a}{q-1},m=\frac{b-k}{q-1} k=q1am=q1bk,证明用错位相减法,这里省略。

用到了再补充。

参考程序:

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS 1
#endif#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
/*
http://ybt.ssoier.cn:8088/problem_show.php?pid=1615
这题纯数值。即使是快速幂算法,也要通过模运算的乘法性质
对每一步操作进行极致的限制。
*/
typedef unsigned long long ull;
const ull pp = 200907;ull quickPow(ull a, ull b, ull n) {ull res = 1;a %= n;while (b) {if (b % 2)res = res * a % n;a = a * a % n;b /= 2;}return res;
}void ac() {int T;cin >> T;while (T--) {ull a, b, c;ull k;cin >> a >> b >> c >> k;if (b - a == c - b)cout << ((a % pp + ((k - 1) * (c - b)) % pp) % pp) << endl;elsecout << ((a % pp) * quickPow(c / b, k - 1, pp)) % pp << endl;}
}int main() {ac();return 0;
}
计数原理

题目链接:1618:越狱

根据乘法原理,总的方案数为
m × m × . . . × m = m n m\times m\times ...\times m=m^n m×m×...×m=mn

想要没人越狱,则满足条件的方案数为
m × ( m − 1 ) × ( m − 1 ) = m × ( m − 1 ) n − 1 m\times (m-1)\times (m-1)=m\times (m-1)^{n-1} m×(m1)×(m1)=m×(m1)n1

有人越狱的方案数为 m n − ( m × ( m − 1 ) n − 1 ) m^n - (m\times (m-1)^{n-1}) mn(m×(m1)n1)

对这个数学式求模得到结果:
( m n − ( m × ( m − 1 ) n − 1 ) ) % p = ( ( m n % p − ( ( m % p ) × ( ( m − 1 ) n − 1 % p ) ) % p + x × p ) % p (m^n - (m\times (m-1)^{n-1}))\%p=((m^n\%p-((m\%p)\times ((m-1)^{n-1} \%p))\%p + x\times p)\%p (mn(m×(m1)n1))%p=((mn%p((m%p)×((m1)n1%p))%p+x×p)%p(推导请移步其他博主)。
x ∗ p x*p xp是为了防止表达式出现负数,一般情况 x x x取1即可。

参考程序:

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS 1
#endif#include<iostream>
#include<vector>
using namespace std;
typedef unsigned long long ull;
const ull p=100003ull;ull quickPow(ull a,ull b,ull n){ull ans=1ull;while(b){if(b%2ull)ans=ans*a%n;a=a*a%n;b/=2ull;}return ans;
}void ac1(){ull n,m;cin>>m>>n;cout<<( quickPow(m,n,p)- ( (m%p)*quickPow(m-1,n-1,p) )%p +p)%p;
}int main() {ac1();return 0;
}

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

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

相关文章

无人机遥感在农林信息提取中的实现方法与GIS融合应用

在新一轮互联网信息技术大发展的现今&#xff0c;无人机、大数据、人工智能、物联网等新兴技术在各行各业都处于大爆发的前夜。为了将人工智能方法引入农业生产领域。首先在种植、养护等生产作业环节&#xff0c;逐步摆脱人力依赖&#xff1b;在施肥灌溉环节构建智慧节能系统&a…

Android设备 网络安全检测

八、网络与安全机制 6.1 网络框架对比 volley&#xff1a; 功能 基于HttpUrlConnection;封装了UIL图片加载框架&#xff0c;支持图片加载;网络请求的排序、优先级处理缓存;多级别取消请求;Activity和生命周期的联动&#xff08;Activity结束生命周期同时取消所有网络请求 …

【油猴脚本/Tampermonkey】DeepSeek 服务器繁忙无限重试(20250214优化)

目录 一、 引言 二、 逻辑 三、 源代码 四、 添加新脚本 五、 使用 六、 BUG 七、 优化日志 1.获取最后消息内容报错 2.对话框切换无法正常使用 一、 引言 deepseek演都不演了&#xff0c;每次第一次提问就正常&#xff0c;后面就开始繁忙了&#xff0c;有一点阴招全…

C++ Primer 函数重载

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

【c++初阶】类和对象②默认成员函数以及运算符重载初识

目录 ​编辑 默认成员函数&#xff1a; 构造函数 构造函数的特性&#xff1a; 析构函数&#xff1a; 拷贝构造函数&#xff1a; 1. 拷贝构造函数是构造函数的一个重载形式。 2. 拷贝构造函数的参数只有一个且必须是类类型对象的引用&#xff0c;使用传值方式编译器直接报…

基于AIOHTTP、Websocket和Vue3一步步实现web部署平台,无延迟控制台输出,接近原生SSH连接

背景&#xff1a;笔者是一名Javaer&#xff0c;但是最近因为某些原因迷上了Python和它的Asyncio&#xff0c;至于什么原因&#xff1f;请往下看。在着迷”犯浑“的过程中&#xff0c;也接触到了一些高并发高性能的组件&#xff0c;通过简单的学习和了解&#xff0c;aiohttp这个…

【鸿蒙HarmonyOS Next实战开发】lottie动画库

简介 lottie是一个适用于OpenHarmony和HarmonyOS的动画库&#xff0c;它可以解析Adobe After Effects软件通过Bodymovin插件导出的json格式的动画&#xff0c;并在移动设备上进行本地渲染。 下载安裝 ohpm install ohos/lottieOpenHarmony ohpm 环境配置等更多内容&#xff0c…

UE_C++ —— UObject Instance Creation

目录 一&#xff0c;UObject Instance Creation NewObject NewNamedObject ConstructObject Object Flags 二&#xff0c;Unreal Object Handling Automatic Property Initialization Automatic Updating of References Serialization Updating of Property Values …

PHP本地商家卡券管理系统

本地商家卡券管理系统 —— 引领智慧消费新时代 本地商家卡券管理系统&#xff0c;是基于ThinkPHPUni-appuView尖端技术匠心打造的一款微信小程序&#xff0c;它彻底颠覆了传统优惠方式&#xff0c;开创了多商家联合发行优惠卡、折扣券的全新模式&#xff0c;发卡类型灵活多变…

什么是HTTP Error 429以及如何修复

为了有效管理服务器资源并确保所有用户都可以访问&#xff0c;主机提供商一般都会对主机的请求发送速度上做限制&#xff0c;一旦用户在规定时间内向服务器发送的请求超过了允许的限额&#xff0c;就可能会出现429错误。 例如&#xff0c;一个API允许每个用户每小时发送100个请…

无人机不等同轴旋翼架构设计应用探究

“结果显示&#xff0c;对于不等组合&#xff0c;用户应将较小的螺旋桨置于上游以提高能效&#xff0c;但若追求最大推力&#xff0c;则两个相等的螺旋桨更为理想。” 在近期的研究《不等同轴旋翼性能特性探究》中&#xff0c;Max Miles和Stephen D. Prior博士深入探讨了不同螺…

节目选择器安卓软件编写(针对老年人)

文章目录 需求来源软件界面演示效果源码获取 对爬虫、逆向感兴趣的同学可以查看文章&#xff0c;一对一小班教学&#xff1a;https://blog.csdn.net/weixin_35770067/article/details/142514698 需求来源 由于现在的视频软件过于复杂&#xff0c;某客户想开发一个针对老年人、…

Vue的简单入门 一

声明&#xff1a;本版块根据B站学习&#xff0c;创建的是vue3项目&#xff0c;用的是vue2语法风格&#xff0c;仅供初学者学习。 目录 一、Vue项目的创建 1.已安装15.0或更高版本的Node.js 2.创建项目 二、 简单认识目录结构 三、模块语法中的指令 1.v-html 1.文本插值…

【动手学强化学习】03马尔可夫决策过程

马尔可夫决策过程始终贯穿强化学习&#xff0c;要学好强化学习&#xff0c;必须掌握马尔可夫决策过程的基础知识。与多臂老虎机不同&#xff0c;马尔可夫决策过程包含状态信息以及状态转移机制。 马尔可夫过程 当且仅当某时刻的状态只取决于上个时刻的状态时&#xff0c;一个…

RabbitMQ学习—day2—安装

目录 普通Linux安装 安装RabbitMQ 1、下载 2、安装 3. Web管理界面及授权操作 Docker 安装 强力推荐学docker&#xff0c;使用docker安装 普通Linux安装 安装RabbitMQ 1、下载 官网下载地址&#xff1a;https://www.rabbitmq.com/download.html(opens new window) 这…

SQL Server的安装和简单使用

目录 一、SQL Server 1.1、简介 1.2、安装包 二、安装SQL Server 2.1、双击安装包 2.2、选择自己想要安装的位置 2.3、点击安装 2.4、安装完成之后会出现以下页面&#xff0c;按照序号依次点击 2.5、不用管密钥&#xff0c;点击下一步 2.6、选择【我接受】 2.7、是否…

前缀和(Prefix Sum)算法笔记C++

前缀和(Prefix Sum)算法介绍 前缀和是一种预处理技术, 用于快速计算数组中任意子区间的元素之和. 它通过一次遍历创建一个辅助数组来存储从数组起始位置到当前索引位置所有元素的累加和, 从而使得后续查询操作的时间复杂度降低至 O ( 1 ) O(1) O(1). 定义 对于给定的数组 n…

ffmpeg学习:ubuntu下编译Android版ffmpeg-kit

文章目录 前言一. 配置环境1.1 虚拟机版本1.2 安装Android环境1.2.1 Android SDK安装1.2.2 Android NDK安装 1.3 编译前的准备工作1.3.1 libtasn1-1安装1.3.2 meson安装1.3.3 harfbuzz下载 二. 编译ffmpeg-kit三. 总结 前言 ffmpeg-kit是一款跨多个平台的&#xff0c;用于在应…

Vue 中报错 TypeError: crypto$2.getRandomValues is not a function

问题 在新建的项目中&#xff0c;使用的是 npm init vue 创建项目后&#xff0c;执行命令 npm i &#xff0c;然后去 npm run dev 这个时候报错 TypeError: crypto$2.getRandomValues is not a function 起初是以为搞错了&#xff0c;然后再删掉 node_modules 和 package-lo…

‌OpenAI GPT-4.5技术详解与未来展望

一、GPT-4.5的技术突破‌ OpenAI在人工智能领域的持续创新再次引领了技术潮流。近期,OpenAI内部已经成功实现了GPT-4.5的开发,这一版本相较于前代在多个方面实现了显著的技术突破‌。 GPT-4.5在算法优化和数据处理上进行了多项创新,使得模型在对自然语言的理解上,尤其是在…