网站制作学校找哪家上海房地产管理局政务信息网
2026/5/14 7:29:16 网站建设 项目流程
网站制作学校找哪家,上海房地产管理局政务信息网,网站建设案例 央视网,微网站对比目录 ​编辑 前言 一、基础铺垫#xff1a;同余式的核心性质 1.1 同余的定义 1.2 同余式的关键性质 二、费马小定理#xff1a;模运算的 “除法钥匙” 2.1 定理的准确表述 定理的核心条件#xff08;缺一不可#xff09;#xff1a; 2.2 定理的核心价值#xff…目录​编辑前言一、基础铺垫同余式的核心性质1.1 同余的定义1.2 同余式的关键性质二、费马小定理模运算的 “除法钥匙”2.1 定理的准确表述定理的核心条件缺一不可2.2 定理的核心价值推导乘法逆元乘法逆元的定义2.3 定理的应用场景三、快速幂算法费马小定理的 “执行工具”3.1 快速幂的核心思想3.2 快速幂的 C 实现3.3 代码分析四、实战例题 1洛谷 P11465 水上舞者索尼娅等比数列求和4.1 题目分析4.2 代码实现4.3 代码验证4.4 关键优化五、实战例题 2洛谷 序列求和含除法的求和公式5.1 题目分析5.2 代码实现5.3 代码验证5.4 关键优化六、常见误区与避坑指南6.1 定理条件遗漏6.2 数值溢出问题6.3 逆元应用错误6.4 快速幂实现错误总结前言在算法竞赛的数论领域费马小定理是解决模运算、乘法逆元等问题的 “金钥匙”。它看似简洁却能破解模运算中除法不能直接取模的核心痛点成为快速幂、组合数计算、序列求和等问题的核心支撑。本文将从同余性质切入层层拆解费马小定理的原理、应用场景详解乘法逆元的求解逻辑手把手教你掌握从理论到实战的全流程让你在模运算问题中轻松举一反三。下面就让我们正式开始吧一、基础铺垫同余式的核心性质在理解费马小定理之前我们必须先掌握同余式的基本概念和性质 —— 这是数论中模运算的基础也是费马小定理应用的前提。1.1 同余的定义若两个整数 a 和 b 除以正整数 m 的余数相同则称 a 和 b 模 m 同余记作a≡b(mod m)。例如7 除以 3 余 14 除以 3 也余 1因此7≡4(mod 3)。同余的本质是a−b能被 m 整除即m∣(a−b)。这个定义看似简单却能将复杂的整数运算转化为模意义下的简化运算大幅降低计算难度。1.2 同余式的关键性质同余式满足加、减、乘三种运算的封闭性但不满足除法运算 —— 这也是后续需要乘法逆元的核心原因。具体性质如下同加性若a≡b(mod m)则ac≡bc(mod m)同减性若a≡b(mod m)则a−c≡b−c(mod m)同乘性若a≡b(mod m)则a×c≡b×c(mod m)不满足同除性若a≡b(modm)则a/c ​≡ b/c (mod m)不一定成立。举个反例20≡2(mod 3)20 mod 322 mod 32但两边同时除以 10 后2≡0.2(mod 3)显然不成立 —— 因为 10 和 3 不互质除法运算破坏了同余关系。这个性质告诉我们在模运算中加法、减法、乘法可以边计算边取模以防止溢出但除法不能直接操作。而费马小定理的核心作用就是为模运算中的除法提供一种 “转化方案”—— 将除法转化为乘法。二、费马小定理模运算的 “除法钥匙”2.1 定理的准确表述费马小定理Fermats Little Theorem指出若 p 为质数且整数 a 与 p互质即gcd(a,p)1则有。定理的核心条件缺一不可p 必须是质数—— 这是定理成立的前提若 p 为合数定理大概率不成立例如 p4a22^38≡0(mod4)≠1a 与 p 必须互质—— 若 a 与 p 有公因数 d1则a^{p−1}mod p的结果不可能为 1例如 p5a1010^410000≡0(mod 5)≠1。2.2 定理的核心价值推导乘法逆元费马小定理的最大作用是为模运算中的除法提供“乘法逆元”—— 这是解决模除法问题的关键。对定理公式a^{p−1}≡1(mod p)进行变形a×a^{p−2}≡1(mod p)这个式子的意义是在模 p 的意义下a^{p−2}与 a 相乘的结果为 1。这恰好满足 “乘法逆元” 的定义 —— 我们称a^{p−2}是 a 模 p 的乘法逆元记作a−1。乘法逆元的定义若 a 与 m 互质且存在整数 x 使得a×x≡1(mod m)则 x 是 a 模 m 的乘法逆元。有了逆元模运算中的除法就可以转化为乘法(a^b​)mod p(b×a−1)mod p例如计算(25÷5)mod35 和 3 互质3 是质数因此 5 的逆元为5^{3−2} 5^1 5 ≡ 2 (mod 3)原式转化为(25×2) mod 3 50 mod 3 2与实际结果25÷555 mod 32一致。2.3 定理的应用场景费马小定理的应用本质上是 “逆元的应用”主要解决以下三类竞赛高频问题模除法计算将除法转化为乘法避免直接除法导致的同余失效快速幂取模结合快速幂算法高效计算大指数幂的模运算组合数计算组合数公式中含除法如C(n,k)k!(n−k)!n!​需用逆元转化为乘法后取模序列求和对于含除法的求和公式如等比数列求和用逆元处理分母后取模。三、快速幂算法费马小定理的 “执行工具”要应用费马小定理求逆元必须高效计算a^{p−2} mod p—— 当 p 是 1e97 这样的大质数时p−2可达 1e9 级别直接循环计算会超时。此时需要“快速幂算法”Binary Exponentiation将时间复杂度从O(n)降至O(logn)。3.1 快速幂的核心思想快速幂的本质是“二进制分解”将指数 b 分解为 2 的幂次之和利用同乘性逐步计算幂次。例如计算a10modp10 的二进制为 1010即10822321因此a10a8×a2只需计算a2、a8再将结果相乘取模即可。3.2 快速幂的 C 实现#include iostream using namespace std; typedef long long LL; // 快速幂计算 (a^b) mod p LL qpow(LL a, LL b, LL p) { LL ret 1; // 结果初始化为1 a a % p; // 先对底数取模防止溢出 while (b 0) { // 若当前二进制位为1将结果乘上当前底数的幂次 if (b 1) { ret ret * a % p; // 边乘边取模避免溢出 } // 底数平方对应二进制位左移一位 a a * a % p; // 指数右移一位处理下一个二进制位 b 1; } return ret; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); LL a 5, p 3; LL inv qpow(a, p - 2, p); // 求5模3的逆元 cout 5的逆元模3为 inv endl; // 输出2 return 0; }3.3 代码分析时间复杂度O(logb)指数 b 的二进制位数为log2​b循环次数等于位数溢出处理使用long long存储所有变量且每次乘法后都取模避免大数相乘导致的溢出适用性可处理 a、b、p 均为 1e18 级别的数据只要a*a不超过long long范围若超过需用快速乘优化。四、实战例题 1洛谷 P11465 水上舞者索尼娅等比数列求和题目链接https://www.luogu.com.cn/problem/P114654.1 题目分析题目描述场上有 k 个 “水上舞者索尼娅”手牌有 1 张法力值消耗为 1 的 “一串香蕉剩 n 根”使用 1 张消耗 1 的香蕉x 根获得 k 张消耗 0 的香蕉x 根 1 张消耗 1 的香蕉x-1 根x1 时无使用 1 张消耗 0 的香蕉x 根获得 1 张消耗 1 的香蕉x-1 根x1 时无求最多可使用多少次香蕉答案对 1e97 取模。核心思路通过分析使用过程可推导出总使用次数为等比数列求和S(k1)n(k1)n−1...(k1)1等比数列求和公式为Sk(k1)((k1)n−1)​公比 rk1项数 n公式含除法需用费马小定理求 k 的逆元将除法转化为乘法后取模1e97 是质数满足费马小定理条件。4.2 代码实现#include iostream using namespace std; typedef long long LL; const int MOD 1e9 7; // 质数满足费马小定理条件 // 快速幂算法 LL qpow(LL a, LL b, LL p) { LL ret 1; a % p; while (b) { if (b 1) ret ret * a % p; a a * a % p; b 1; } return ret; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin T; while (T--) { LL n, k; cin n k; if (k 0) { // 特殊情况k0时只能使用n次每次消耗1张无额外获得 cout n % MOD endl; continue; } // 等比数列求和S ( (k1)^(n1) - (k1) ) / k LL r (k 1) % MOD; // 公比 LL numerator (qpow(r, n 1, MOD) - r MOD) % MOD; // 分子(r^(n1) - r)加MOD避免负数 LL inv_k qpow(k % MOD, MOD - 2, MOD); // k的逆元 LL ans numerator * inv_k % MOD; cout ans endl; } return 0; }4.3 代码验证示例输入32 23 112 34示例输出1214178629506第一组数据n2k2公比 r3分子 3^(3) - 3 27-324k2 的逆元为21e97−2mod1e97500000004ans24 * 500000004 mod 1e97 12与示例是一致的。4.4 关键优化负数处理计算qpow(r,n1)−r时若结果为负如 r1n0需加 MOD 后再取模避免负数取模出错特殊情况k0 时无额外香蕉获得直接输出 n mod MOD数据范围所有变量用 LL 存储防止 1e97 级别数据相乘溢出。五、实战例题 2洛谷 序列求和含除法的求和公式题目链接https://ac.nowcoder.com/acm/problem/159505.1 题目分析题目描述定义S(n)1222...n2输出S(n)mod1e97限制1n1e18。核心思路平方和公式为S(n)6n(n1)(2n1)​n 可达 1e18直接计算会溢出需边计算边取模公式含除法 6需用费马小定理求 6 的逆元1e97 是质数6 与 1e97 互质。5.2 代码实现#include iostream using namespace std; typedef long long LL; const int MOD 1e9 7; // 快速幂求逆元 LL qpow(LL a, LL b, LL p) { LL ret 1; a % p; while (b) { if (b 1) ret ret * a % p; a a * a % p; b 1; } return ret; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); LL n; while (cin n) { // 分别对n、n1、2n1取模避免溢出 LL a n % MOD; LL b (n 1) % MOD; LL c (2 * n 1) % MOD; // 求6的逆元 LL inv6 qpow(6, MOD - 2, MOD); // 计算(a*b % MOD) * c % MOD * inv6 % MOD LL ans a * b % MOD; ans ans * c % MOD; ans ans * inv6 % MOD; cout ans endl; } return 0; }5.3 代码验证示例输入1 → 输出 11²12 → 输出 51451000 → 输出 333833500第三组数据n1000公式计算1000×1001×2001 /6 1000×1001×333.5 333833500代码计算(1000×1001×2001) mod 1e97 (1001000×2001) mod 1e97 2003001000 mod 1e97 2003001000 - 2×1e97 2003001000 - 2000000014 30009863000986 × 1666666686 的逆元mod 1e97 333833500与示例是一致的。5.4 关键优化分步取模n、n1、2n1 分别取模后再相乘避免 1e18 级别数据直接相乘导致的溢出逆元预计算6 的逆元是固定值166666668可直接硬编码减少计算时间但为了代码通用性仍保留快速幂计算。六、常见误区与避坑指南6.1 定理条件遗漏误区忽略 p 必须是质数或 a 与 p 必须互质直接套用公式求逆元反例p4合数a2与 4 不互质求逆元时用24−24≡0(mod 4)显然不满足逆元定义避坑使用费马小定理前先验证 p 是否为质数竞赛中模数多为 1e97、998244353 等已知质数且 a 与 p 互质若 a 是 p 的倍数逆元不存在。6.2 数值溢出问题误区计算a×b时未取模导致溢出示例a1e9b1e9p1e97直接计算a×b1e18超过 int 范围2e9和 long long 范围9e18接近临界值避坑每次乘法后都对 p 取模即ret ret * a % p确保中间结果始终在 p 范围内。6.3 逆元应用错误误区将逆元用于非模除法场景或公式转化错误示例计算cab​modp错误转化为(ab)×c^{−1} mod p—— 正确转化应为(ab)mod p×c^{−1} mod p避坑先对分子部分取模再乘以逆元最后再次取模确保每一步都符合同余性质。6.4 快速幂实现错误误区忘记对底数 a 取模导致初始底数过大示例a1e98p1e97未取模时 a1e98取模后 a1后续计算大幅简化避坑快速幂函数开头添加a a % p确保底数始终在合理范围。总结费马小定理是模运算的核心工具其本质是 “通过同余性质推导逆元将除法转化为乘法”。若想进一步深化学习建议重点练习组合数取模、等比数列求和、大指数幂取模等题型熟练掌握逆元的三种求法及其适用场景。如果在学习过程中遇到具体题目无法解决或想了解欧拉定理、扩展欧几里得算法的深入应用可以随时留言交流。后续将持续更新数论进阶内容敬请关注

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询