快速幂、快速乘
快速幂等算法都是基于二进制优化的算法,本文不做过多叙述,在此只是留下模板,并介绍快速乘
快速幂
int qpow(int a, int b, int p) {
int res = 1 % p;
for (; b; b >>= 1, a = (long long) a * a % p) if (b & 1)
res = (long long) res * a % p;
return res;
}
快速乘
#define qword long long
qword qmul(qword a, qword b, qword p) {
qword res = 0;
for (; b; b >>= 1, a = (a + a) % p) if (b & 1)
res = (res + a) % p;
return res;
}
快速乘
利用
首先 时, 一定小于 ,我们可以用浮点数进行 的运算,而不用关心小数点后面的部分。浮点类型long double
在十进制下可以储存 位。
当浮点数的精度不足以保证位数时,它会以科学记数法舍弃低位,这并不会影响我们需要的整数部分的运算
另外,虽然 和 可能很大,但是二者的差一定在 之间,我们只关心它们的较低位数就可以,所以,我们用long long
储存 和 各自的结果,整数溢出相当于舍弃最高位,也正好符合我们的要求
#define qword long long
qword mul(qword a, qword b, qword p) {
a %= p, b %= p;
qword c = (long double) a * b / p;
qword ans = a * b - c * p;
if (ans < 0) ans += p;
else if (ans >= p) ans -= p;
return ans;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具