的定义是?
考点:同余的定义(A1)。
解析: ⇔ ⇔ 与 除以 的余数相同。✅ 正确
排除法:无(判断题)。混淆点:同余不是相等—— 但 。
关联 · 同余与余数(A6):两种定义等价。
若 且 ,则下列恒成立的是?
考点:同余的加减乘性质(A2)。
解析:同余式可以相加、相减、相乘:(模 )。✅ 正确
排除法:无(判断题)。混淆点:除法不在其列(A4)——同余的运算法则到乘为止。
关联 · 模运算的除法不成立(A4):唯一不封闭的运算。
判断题:同余关系具有自反性()、对称性(若 则 )和传递性(若 、 则 )——它是等价关系。
考点:同余的传递性(A3)。
解析:同余是等价关系:自反()、对称()、传递()。✅ 正确
排除法:无(判断题)。混淆点:等价关系三性质常用于同余式的链式推导。
关联 · 同余的定义(A1):等价关系的载体。
判断题:由 不能直接推出 ——除法(消去律)需要额外条件。
考点:模运算的除法不成立(A4)。
解析: 不能直接约去 ——消去律需要 (或同除 gcd 后调整模数)。✅ 正确
排除法:无(判断题)。混淆点:这正是"逆元"存在的意义——除不掉就乘逆元。
关联 · 同余的消去律(G6):消去律的条件。
同余方程 有解的条件是?
考点:同余方程(A5)。
解析: 有解 ⇔ 。✅ 正确
排除法:无(判断题)。混淆点: 时解唯一(模 );不满足整除条件则无解。
关联 · 同余方程求解(N6):解法的代码版。
判断题: 等价于" 与 除以 的余数相同"——两者可以互相翻译。
考点:同余与余数(A6)。
解析:两种定义等价——"余数相同"是直观版本、"整除差"是运算版本。✅ 正确
排除法:无(判断题)。混淆点:C++ 的 % 给的是"余数",同余判定就是比余数(I2)。
关联 · 同余判定(I2):代码判定。
裴蜀定理的内容是?
考点:裴蜀定理(B1)。
解析: 能表示的最小正整数 = ,故 必有整数解。✅ 正确
排除法:无(判断题)。混淆点:这是 exgcd 与逆元理论的根基。
关联 · exgcd 与 gcd 的关系(B4):exgcd 就是求这组系数。
扩展欧几里得算法的核心思想是?
考点:扩展欧几里得的思想(B2)。
解析:在辗转相除的回溯过程中,反推出满足 的系数——递归返回时修正 x、y。✅ 正确
排除法:无(判断题)。混淆点:不是枚举——是 的确定性构造。
关联 · exgcd 的系数(B3):修正公式。
返回的系数 满足?
考点:扩展欧几里得的系数(B3)。
解析::。✅ 正确
排除法:无(判断题)。混淆点:系数不唯一(通解),但 exgcd 返回的是一组特解。
关联 · exgcd 系数输出(J2):代码版。
判断题:exgcd 是 gcd(辗转相除)的扩展——它返回的最大公约数就是 gcd,同时返回一对裴蜀系数。
考点:exgcd 与 gcd 的关系(B4)。
解析:exgcd = gcd 的扩展——返回值就是 gcd,同时多返回一对裴蜀系数。✅ 正确
排除法:无(判断题)。混淆点:辗转相除框架不变,只是回溯时多算两个系数。
关联 · 扩展欧几里得的思想(B2):扩展点。
的一组特解为 ,通解是?
考点:exgcd 的通解(B5)。
解析:通解 = 特解 + 周期扰动:——加一减一保持 不变。✅ 正确
排除法:无(判断题)。混淆点:符号一加一减(代入后抵消),系数除以 后互质。
关联 · exgcd 通解验证(J6):代码验证。
exgcd 的典型应用是?
考点:exgcd 的应用(B6)。
解析:exgcd 两大应用:求逆元( 的 )、解线性同余方程。✅ 正确
排除法:无(判断题)。混淆点:求最大值/排序/素数判定与 exgcd 无关。
关联 · exgcd 求逆元(K2):应用代码。
的一组解是?
考点:exgcd 过程示例(B7)。
解析:。✅ 正确
排除法:无(判断题)。混淆点:验证系数只要代回算一遍。
关联 · exgcd 的系数(B3):同构题。
模 意义下 的逆元 满足?
考点:逆元的定义(C1)。
解析: 满足 ——模意义下的"倒数"。✅ 正确
排除法:无(判断题)。混淆点:不是 、不是 、不是 的逆。
关联 · 逆元计算示例(C7):实例。
模 意义下, 的逆元存在的充要条件是?
考点:逆元存在的条件(C2)。
解析:逆元存在 ⇔ (裴蜀定理: 有解)。✅ 正确
排除法:无(判断题)。混淆点:与 是否素数无关; 也无妨(先取模)。
关联 · 逆元不存在的情形(H1):反例。
判断题:模 意义下(), 的逆元在模 意义下是唯一的。
考点:逆元的唯一性(C3)。
解析:模 意义下逆元唯一——若 且 ,则 。✅ 正确
排除法:无(判断题)。混淆点:唯一是"模 m 同余意义下",代表元可取任意同余值。
关联 · 逆元的定义(C1):唯一性证明。
模意义下,除以 等价于?
考点:逆元的用途(C4)。
解析:模意义下"除以 " = "乘以 "——把不封闭的除法转成封闭的乘法。✅ 正确
排除法:无(判断题)。混淆点:前提 。
关联 · 模意义下的除法(F3):用途的展开。
判断题:(两者都存在时)——逆元运算与乘法可交换"取逆"与"相乘"的顺序。
考点:逆元的运算性质(C5)。
解析:——乘积的逆 = 逆的乘积(展开验证:)。✅ 正确
排除法:无(判断题)。混淆点:逆元与乘法可交换顺序,与加法不满足此律。
关联 · 组合数取模(G2):多处逆元连乘的应用。
判断题:0 在模任何模数下都没有逆元()。
考点:0 没有逆元(C6)。
解析:()——0 永远没有逆元,模意义下除以 0 永远非法。✅ 正确
排除法:无(判断题)。混淆点:与实数域"0 无倒数"一致。
关联 · 逆元存在的条件(C2):条件验证。
模 7 意义下,3 的逆元是?()
考点:逆元计算示例(C7)。
解析: → 。✅ 正确
排除法:无(判断题)。混淆点:手算小模数逆元 = 试乘 。
关联 · 费马小定理求逆元(D1):大模数的求法。
为素数且 不是 的倍数时,用费马小定理求逆元的公式是?
考点:费马小定理求逆元(D1)。
解析: 素数: → → (快速幂计算)。✅ 正确
排除法:无(判断题)。混淆点:指数是 不是 。
关联 · 费马小定理快速幂求逆元(K1):代码版。
用 exgcd 求 模 的逆元()的思路是?
考点:扩展欧几里得求逆元(D2)。
解析:解 ( 有解),则 即 。✅ 正确
排除法:无(判断题)。混淆点:模可为合数——这是 exgcd 法对费马法的优势。
关联 · exgcd 求逆元(K2):代码版。
线性递推求 模素数 的逆元,公式是?
考点:线性递推求逆元(D3)。
解析:—— 求全部 的逆元。✅ 正确
排除法:无(判断题)。混淆点:,故 已算过。
关联 · 线性递推求逆元(K3):代码版。
判断题:费马小定理法要求模为素数;exgcd 法只要求 (模可为合数);递推法适合批量求 模素数的逆元。
考点:三种方法的适用条件(D4)。
解析:费马法要素数模;exgcd 法只要互质(合数模也行);递推法批量求 模素数。✅ 正确
排除法:无(判断题)。混淆点:三法的条件差异是单选题高频。
关联 · 求法选择(D6):选择矩阵。
费马小定理 成立的条件是?
考点:费马小定理的条件(D5)。
解析: 素数且 (即 )——两个条件缺一不可。✅ 正确
排除法:无(判断题)。混淆点:合数模下费马不成立(H2/P2)。
关联 · 费马小定理(E1):定理本体。
模数为合数(如 12)时,求逆元应选用?
考点:求法选择(D6)。
解析:模 12 是合数 → 费马不适用 → exgcd 法( 时)。✅ 正确
排除法:无(判断题)。混淆点:递推法也要求素数模。
关联 · 三种方法的适用条件(D4):条件驱动的选择。
需要求 全部模素数 的逆元时,最优做法是?
考点:批量求逆元场景(D7)。
解析: 全求逆元 → 线性递推(每个 ),完胜 次快速幂的 。✅ 正确
排除法:无(判断题)。混淆点:组合数预处理常用此批量逆元。
关联 · 批量逆元(K7):代码版。
费马小定理的内容是?
考点:费马小定理(E1)。
解析: 素数、 → 。✅ 正确
排除法:无(判断题)。混淆点:等价形式 (对 也成立)。
关联 · 费马小定理的条件(E2):条件强调。
判断题:费马小定理要求 是素数—— 是合数时 不一定成立。
考点:费马小定理的条件(E2)。
解析: 必须素数——合数模下 不一定成立(如 )。✅ 正确
排除法:无(判断题)。混淆点:合数要用欧拉定理(指数 )。
关联 · 欧拉定理(E4):合数版推广。
欧拉函数 的定义是?
考点:欧拉函数(E3)。
解析: = 中与 互质的个数。✅ 正确
排除法:无(判断题)。混淆点:不是素数个数(那是 )、不是约数个数。
关联 · 欧拉函数计算(M1):代码版。
欧拉定理的内容是?
考点:欧拉定理(E4)。
解析: → ——费马小定理的合数推广。✅ 正确
排除法:无(判断题)。混淆点:指数是 不是 (后者只在素数时对)。
关联 · 欧拉定理验证(M4):代码版。
判断题: 为素数时 ,欧拉定理退化为费马小定理——费马小定理是欧拉定理的特例。
考点:费马是欧拉的特例(E5)。
解析: 素数时 → 欧拉定理 即费马小定理。✅ 正确
排除法:无(判断题)。混淆点:特例关系是"费马 ⊂ 欧拉"。
关联 · 欧拉与费马(M6):代码视角。
考点:素数模的欧拉函数(E6)。
解析:—— 全部与 7 互质(7 是素数)。✅ 正确
排除法:无(判断题)。混淆点:素数 的 。
关联 · φ(p) = p - 1(M2):代码版。
判断题:模运算中,加法与乘法可以"先各自取模再运算再取模"——,乘法同理。
考点:模的加法乘法(F1)。
解析:加减乘都可"先各自取模再运算再取模"——,乘法同理。✅ 正确
排除法:无(判断题)。混淆点:除法不在此列(乘逆元)。
关联 · 模的加法乘法(J 组 18 章 D5/D6):入门级回顾。
模意义下 为避免负数,应写为?
考点:模意义下的减法(F2)。
解析:减法后加 再取模——规范化到 ,避免负数余数。✅ 正确
排除法:无(判断题)。混淆点:C++ 的 % 对负数给出负余数(H4)。
关联 · 负数取模规范化(I5):代码版。
模意义下 ()应计算为?
考点:模意义下的除法(F3)。
解析:()——除法转乘法。✅ 正确
排除法:无(判断题)。混淆点:不是整数除法、不是"各自取模再除"(H3)。
关联 · 分数取模(G3):概念展开。
判断题:大数连乘/连加取模,应"每步运算后立即取模"防止溢出——积/和不会超过 级别。
考点:大数取模技巧(F4)。
解析:连乘/连加每步取模——中间值不超过 ,避免溢出。✅ 正确
排除法:无(判断题)。混淆点:最后才取模会中途溢出(P4)。
关联 · 快速幂漏取模(P4):错误示范。
判断题: 与"存在整数 使 "等价——同余方程就是带余数条件的线性方程。
考点:模运算与同余方程(F5)。
解析: ⇔ ( 整数)——同余方程即带余数的线性方程。✅ 正确
排除法:无(判断题)。混淆点:这是从同余到普通方程的翻译桥梁。
关联 · 同余方程(A5):可解性条件。
判断题: 且 时,可消去 得 ——消去律要求 与 互质。
考点:同余式化简(F6)。
解析: 时可消去 ——消去律的条件是 与模互质。✅ 正确
排除法:无(判断题)。混淆点:不互质则解集变大(G6 的反例)。
关联 · 同余的消去律(G6):条件与反例。
计算 ( 很大)的常用方法是?
考点:模幂(G1)。
解析: 用快速幂:二进制拆指数、每步取模,。✅ 正确
排除法:无(判断题)。混淆点:先算 再取模必溢出。
关联 · 快速幂取模输出(L1):代码版。
计算 ( 素数)的常用方法是?
考点:组合数取模(G2)。
解析:——阶乘预处理 + 逆元。✅ 正确
排除法:无(判断题)。混淆点: 大时杨辉三角 空间不够,逆元法 预处理。
关联 · 组合数取模(K6):代码版。
判断题:分数 ()= ——分数取模就是乘分母的逆元。
考点:分数取模(G3)。
解析:——分数取模就是乘分母逆元。✅ 正确
排除法:无(判断题)。混淆点:竞赛中"输出概率/期望对 取模"全用此式。
关联 · 分数取模(K5):代码版。
今天是星期三,100 天后是星期几?(用同余:)
考点:日期周期问题(G4)。
解析: → 星期三 + 2 = 星期五。✅ 正确
排除法:无(判断题)。混淆点:周期问题 = 取模问题——星期、时钟、循环队列皆如此。
关联 · 周期问题(N1):代码版。
判断题:RSA 等公钥密码依赖"大数分解难"与"模幂/逆元易"的不对称——同余与逆元是现代密码学的数学基础。
考点:密码学思想(G5)。
解析:RSA 依赖大数分解难 + 模幂/逆元易——同余逆元是公钥密码的数学地基。✅ 正确
排除法:无(判断题)。混淆点:教学定位——知道"同余有什么用"即可。
关联 · 模幂(G1):RSA 中的模幂。
判断题: 不能推出 ——因为 (实际上 或 )。
考点:同余的消去律(G6)。
解析: 的解是 或 ——不能消去 2()。✅ 正确
排除法:无(判断题)。混淆点:消去律失效 = 解集分裂——这是同余与等式的关键差异。
关联 · 同余式化简(F6):互质条件下的消去。
判断题:模 12 意义下,6 没有逆元()——此时"除以 6"在模意义下不合法。
考点:逆元不存在的情形(H1)。
解析: → 6 模 12 无逆元——"除以 6"模 12 不合法。✅ 正确
排除法:无(判断题)。混淆点:存在性检查是除法取模的第一步。
关联 · 逆元存在的条件(C2):判定依据。
判断题:模 10(合数)时用费马小定理求逆元是错误的——费马小定理要求模为素数。
考点:费马小定理误用(H2)。
解析:模 10 是合数 → 费马求逆元公式失效——必须改用 exgcd。✅ 正确
排除法:无(判断题)。混淆点:合数模 + 费马 = 经典错误(P2)。
关联 · 费马小定理的条件(E2):条件检查。
判断题:,而 ——"先各自取模再除"得到错误结果,除法取模必须乘逆元。
考点:除法取模直接除(H3)。
解析:,但 ——"先取模再除"是错误示范。✅ 正确
排除法:无(判断题)。混淆点:除法是唯一不能"先各自取模"的运算。
关联 · 模意义下的除法(F3):正确做法。
判断题:C++ 中 (-7) % 3 == -1,得到数学意义下 的余数应写 ((x % m) + m) % m。
考点:负数取模规范化(H4)。
解析:C++ (-7) % 3 == -1(余数符号随被除数)——数学余数 需 ((x % m) + m) % m。✅ 正确
排除法:无(判断题)。混淆点:与 J 组 18 章 D4 呼应,S 组逆元计算里必用。
关联 · 负数取模规范化(I5):代码版。
判断题:以下结论全部正确——"逆元存在 ⇔ 与模互质;费马小定理求逆元要求素数模;exgcd 对互质情形恒能求逆元;分数取模 = 乘分母逆元"。
考点:同余综合判断(H5)。
解析:四结论全对:逆元存在 ⇔ 互质;费马求逆元要素数模;exgcd 互质恒求逆元;分数取模 = 乘分母逆元。✅ 正确
排除法:无(判断题)。混淆点:本章核心结论收官自查。
关联 · 本章全部核心结论:收官综合判断题。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int a = 17, b = 5; 05 cout << a % b; 06 return 0; 07}
单选题:程序输出是?
考点:取模输出(I1)。
解析:()。正确答案 A。
实现要点:% 是取余运算,结果 = 被除数减去商的整数倍。手算:列竖式。
排除法:B 是商;C 是除数;D 无依据。
关联 · 同余与余数(A6):取模即求余数。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int a = 17, b = 5, m = 6; 05 cout << (a % m == b % m ? "YES" : "NO"); 06 return 0; 07}
单选题:程序输出是?(17 与 5 是否同余模 6)
考点:同余判定(I2)。
解析:、 → 同余 → YES。正确答案 A。
实现要点:同余判定 = 比较两数的 % m 结果。手算:分别取余。
排除法:B 是余数不等;C/D 无依据。
关联 · 同余的定义(A1):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int m = 7; 05 cout << (10 % m + 11 % m) % m << " "; 06 cout << (10 % m - 11 % m + m) % m; 07 return 0; 08}
单选题:程序输出是?
考点:模加减输出(I3)。
解析:;。输出 0 6。正确答案 A。
实现要点:减法先加 再取模——规范化到 。手算:分别算和与差。
排除法:B 忘了取模;C/D 无依据。
关联 · 模意义下的减法(F2):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int m = 7; 05 cout << (10 % m) * (11 % m) % m; 06 return 0; 07}
单选题:程序输出是?
考点:模乘输出(I4)。
解析:。正确答案 A。
实现要点:先各取模、乘完再取模。手算:。
排除法:B 忘了最后取模;C/D 无依据。
关联 · 模的加法乘法(F1):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int x = -7, m = 3; 05 cout << ((x % m) + m) % m; 06 return 0; 07}
单选题:程序输出是?
考点:负数取模规范化(I5)。
解析:(-7 % 3) = -1,(-1 + 3) % 3 = 2。正确答案 A。
实现要点:((x % m) + m) % m 是负数取模规范化的标准写法。手算:。
排除法:B 是 C++ 原始负余数;C/D 无依据。
关联 · 负数取模规范化(H4):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int m = 5; 05 cout << (7 + 3) % m << " " << 7 + 3 % m; 06 return 0; 07}
单选题:程序输出是?
考点:模运算优先级(I6)。
解析:% 与 *、/ 同级,高于 +:;。输出 0 10。正确答案 A。
实现要点:% 优先级高于 +——混用必加括号。手算:按优先级拆。
排除法:B 把第一个也当 10;C/D 无依据。
关联 · 取模输出(I1):优先级陷阱。
01#include <bits/stdc++.h> 02using namespace std; 03int exgcd(int a, int b, int &x, int &y) { 04 if (b == 0) { x = 1; y = 0; return a; } 05 int d = exgcd(b, a % b, y, x); 06 y -= a / b * x; 07 return d; 08} 09int main() { 10 int x, y; 11 cout << exgcd(48, 36, x, y); 12 return 0; 13}
单选题:程序输出是?(exgcd 返回的最大公约数)
考点:exgcd 求 gcd 输出(J1)。
解析:exgcd 返回值 = 。正确答案 A。
实现要点:exgcd 与 gcd 框架相同(递归出口 返回 ),回溯时修正系数。手算:先跑辗转相除得 gcd。
排除法:B/C 是输入;D 无依据。
关联 · exgcd 与 gcd 的关系(B4):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int exgcd(int a, int b, int &x, int &y) { 04 if (b == 0) { x = 1; y = 0; return a; } 05 int d = exgcd(b, a % b, y, x); 06 y -= a / b * x; 07 return d; 08} 09int main() { 10 int x, y; 11 exgcd(48, 36, x, y); 12 cout << x << " " << y; 13 return 0; 14}
单选题:程序输出是?(满足 的一组系数)
考点:exgcd 系数输出(J2)。
解析:exgcd 返回 ,。输出 1 -1。正确答案 A。
实现要点:递归调用交换 x、y 实参(exgcd(b, a % b, y, x))+ 回溯 y -= a / b * x。手算:自底向上回溯系数。
排除法:B 符号反;C/D 无依据。
关联 · exgcd 的系数(B3):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int a = 30, b = 12; 05 while (b) { // 辗转相除过程 06 cout << a << " " << b << " "; 07 int t = a % b; 08 a = b; b = t; 09 } 10 cout << a; 11 return 0; 12}
单选题:程序输出是?
考点:exgcd 过程输出(J3)。
解析:辗转过程:30 12(余 6)→ 12 6(余 0)→ 结束 a=6 → 30 12 12 6 6。正确答案 A。
实现要点:辗转相除 = 每轮打印 (a, b),最后打印 gcd。手算:列每轮 (a, b, 余数)。
排除法:B 多打了 0;C/D 无依据。
关联 · 辗转相除(J 组 18 章 B2):过程可视化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 // 迭代版 exgcd 求 30x + 12y = 6 的一组解 05 int a = 30, b = 12; 06 int x1 = 1, y1 = 0, x2 = 0, y2 = 1; 07 while (b) { 08 int q = a / b; 09 int t = a % b; a = b; b = t; 10 int tx = x1 - q * x2; x1 = x2; x2 = tx; 11 int ty = y1 - q * y2; y1 = y2; y2 = ty; 12 } 13 cout << x1 << " " << y1; 14 return 0; 15}
单选题:程序输出是?(满足 的一组系数)
考点:exgcd 迭代版(J4)。
解析:迭代版系数演算得 ()。输出 1 -2。正确答案 A。
实现要点:迭代版用四变量(x1/y1/x2/y2)交替更新——与递归版等价。手算:按 q 逐轮更新系数。
排除法:B 符号反;C/D 无依据。
关联 · exgcd 系数输出(J2):迭代对照。
01#include <bits/stdc++.h> 02using namespace std; 03int exgcd(int a, int b, int &x, int &y) { 04 if (b == 0) { x = 1; y = 0; return a; } 05 int d = exgcd(b, a % b, y, x); 06 ______; // 回溯修正系数 07 return d; 08} 09int main() { 10 int x, y; 11 exgcd(48, 36, x, y); 12 cout << x << " " << y; 13 return 0; 14}
单选题:横线处应填入?(使输出为 1 -1)
考点:exgcd 填空(J5)。
解析:回溯修正:y -= a / b * x。正确答案 A。
实现要点:修正公式 = 当前层的 y 减去商 × 子问题的 x。手算:验证 。
排除法:B 加号(系数变错);C 修错变量;D 无依据。
关联 · exgcd 系数输出(J2):填空版。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 // 特解 x0=1, y0=-1 满足 48x + 36y = 12(g=12) 05 int x0 = 1, y0 = -1, a = 48, b = 36, g = 12; 06 for (int t = -2; t <= 2; t++) { 07 int x = x0 + b / g * t; 08 int y = y0 - a / g * t; 09 if (a * x + b * y != 12) { cout << "BAD"; return 0; } 10 } 11 cout << "OK"; 12 return 0; 13}
单选题:程序输出是?(通解公式验证)
考点:exgcd 通解验证(J6)。
解析:通解 、 代入恒得 12 → OK。正确答案 A。
实现要点:通解公式 、。手算:代入消去 项。
排除法:B 是代入失败;C/D 无依据。
关联 · exgcd 的通解(B5):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 while (n) { 06 if (n & 1) r = r * a % p; 07 a = a * a % p; 08 n >>= 1; 09 } 10 return r; 11} 12int main() { 13 // 费马小定理:inv(a) = a^(p-2) mod p 14 cout << qpow(3, 5, 7); // 求 3 模 7 的逆元 15 return 0; 16}
单选题:程序输出是?()
考点:费马小定理快速幂求逆元(K1)。
解析:——3 的逆元是 5。正确答案 A。
实现要点:费马求逆元 = 快速幂算 。手算:。
排除法:B 是底数;C 是 1;D 无依据。
关联 · 费马小定理求逆元(D1):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int exgcd(int a, int b, int &x, int &y) { 04 if (b == 0) { x = 1; y = 0; return a; } 05 int d = exgcd(b, a % b, y, x); 06 y -= a / b * x; 07 return d; 08} 09int main() { 10 int a = 3, m = 7, x, y; 11 exgcd(a, m, x, y); // 解 3x + 7y = 1 12 cout << ((x % m) + m) % m; // 规范化到 [0, m) 13 return 0; 14}
单选题:程序输出是?(3 模 7 的逆元)
考点:exgcd 求逆元(K2)。
解析:解 得 ,规范化 ((x % 7) + 7) % 7 = 5。正确答案 A。
实现要点:exgcd 求逆元三件套 = 解 → 取 x → 规范化。手算:验证 。
排除法:B 是未规范化的 -2;C/D 无依据。
关联 · 扩展欧几里得求逆元(D2):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int p = 7; 05 int inv[8] = {0}; 06 inv[1] = 1; 07 for (int i = 2; i <= 6; i++) 08 inv[i] = (long long)(p - p / i) * inv[p % i] % p; 09 for (int i = 1; i <= 6; i++) cout << inv[i] << " "; 10 return 0; 11}
单选题:程序输出是?(1~6 模 7 的逆元序列)
考点:线性递推求逆元(K3)。
解析:递推得 1 4 5 2 3 6。正确答案 A。
实现要点:—— 保证已算过。手算:从 i=2 递推。
排除法:B 是自然数序列;C 是倒序;D 无依据。
关联 · 线性递推求逆元(D3):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int a = 3, inv = 5, m = 7; 05 cout << (a * inv % m == 1 ? "YES" : "NO"); 06 return 0; 07}
单选题:程序输出是?(验证 3 × 5 ≡ 1 (mod 7))
考点:逆元验证(K4)。
解析: → YES。正确答案 A。
实现要点:验证逆元 = 乘起来取模看是否为 1。手算:。
排除法:B 是不等于 1 时;C/D 无依据。
关联 · 逆元的定义(C1):验证代码。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 while (n) { 06 if (n & 1) r = r * a % p; 07 a = a * a % p; 08 n >>= 1; 09 } 10 return r; 11} 12int main() { 13 // 1/2 mod 7 = 1 * inv(2) = 2^(7-2) mod 7 14 cout << qpow(2, 5, 7); 15 return 0; 16}
单选题:程序输出是?(1/2 模 7 的值,即 2 的逆元)
考点:分数取模(K5)。
解析:——()。正确答案 A。
实现要点:分数取模 = 分母求逆元。手算:。
排除法:B 是底数;C/D 无依据。
关联 · 分数取模(G3):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 while (n) { 06 if (n & 1) r = r * a % p; 07 a = a * a % p; 08 n >>= 1; 09 } 10 return r; 11} 12int main() { 13 // C(5,2) mod 7 = 5! / (2! * 3!) mod 7 14 long long fact[6] = {1, 1, 2, 6, 24, 120}; 15 long long p = 7; 16 long long c = fact[5] * qpow(fact[2], p - 2, p) % p * qpow(fact[3], p - 2, p) % p; 17 cout << c; 18 return 0; 19}
单选题:程序输出是?()
考点:组合数取模(K6)。
解析:()。正确答案 A。
实现要点:组合数取模 = 阶乘乘逆元——。手算: 直接验证。
排除法:B 忘了取模;C/D 无依据。
关联 · 组合数取模(G2):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int p = 5; 05 int inv[6] = {0}; 06 inv[1] = 1; 07 for (int i = 2; i <= 4; i++) 08 inv[i] = (long long)(p - p / i) * inv[p % i] % p; 09 for (int i = 1; i <= 4; i++) cout << inv[i] << " "; 10 return 0; 11}
单选题:程序输出是?(1~4 模 5 的逆元)
考点:批量逆元(K7)。
解析:递推得 1 3 2 4(模 5)。正确答案 A。
实现要点:与 K3 同公式、模 5。手算:验证 、、。
排除法:B/C/D 无依据。
关联 · 批量求逆元场景(D7):应用版。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; 06 while (n) { 07 if (n & 1) r = r * a % p; 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 cout << qpow(2, 10, 1000); 15 return 0; 16}
单选题:程序输出是?
考点:快速幂取模输出(L1)。
解析:。正确答案 A。
实现要点:二进制快速幂 + 每步取模。手算:拆指数 。
排除法:B 忘了取模;C/D 无依据。
关联 · 模幂(G1):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; 06 while (n) { 07 if (n & 1) r = r * a % p; 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 cout << qpow(3, 100, 7); // 3^100 mod 7 15 return 0; 16}
单选题:程序输出是?(费马:, → )
考点:大指数输出(L2)。
解析:费马 , → 。正确答案 A。
实现要点:大指数先找循环节(费马/欧拉降幂)。手算:。
排除法:B 是 1(指数恰为倍数时);C/D 无依据。
关联 · 费马小定理(E1):降幂应用。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int base = 3, p = 7, r = 1; 05 for (int i = 1; i <= 4; i++) { // 连乘 4 次,每次取模 06 r = r * base % p; 07 cout << r << " "; 08 } 09 return 0; 10}
单选题:程序输出是?()
考点:模幂过程(L3)。
解析: → 3 2 6 4。正确答案 A。
实现要点:连乘每步取模——观察幂的周期。手算:逐次乘 3 取模。
排除法:B 忘了取模;C/D 无依据。
关联 · 模幂(G1):朴素版过程。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; 06 while (n) { 07 if (______) r = r * a % p; // 当前二进制位为 1 时乘入 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 cout << qpow(2, 10, 1000); 15 return 0; 16}
单选题:横线处应填入?(使输出为 24)
考点:快速幂填空(L4)。
解析:n & 1——当前二进制位为 1 时乘入。正确答案 A。
实现要点:n & 1 取最低位、n >>= 1 看下一位。手算:10 的二进制 1010。
排除法:B 恒真;C 判断错对象;D 无依据。
关联 · 快速幂输出(J 组 19 章 N2):填空版。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; // 先对底数取模 06 while (n) { 07 if (n & 1) r = r * a % p; 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 cout << qpow(1000000001LL, 1, 7); // 底数取模后 1000000001 % 7 = 0 15 return 0; 16}
单选题:程序输出是?
考点:底数取模(L5)。
解析:()→ 结果为 0。正确答案 A。
实现要点:底数先取模——a %= p 是快速幂第一步。手算:整除验证。
排除法:B/C/D 无依据。
关联 · 快速幂取模输出(L1):底数取模的重要性。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; 06 while (n) { 07 if (n & 1) r = r * a % p; 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 // 求 2^100 mod 7 的个位循环应用 15 cout << qpow(2, 100, 7); 16 return 0; 17}
单选题:程序输出是?(, → )
考点:模幂应用(L6)。
解析:, → 。正确答案 A。
实现要点:找小循环节降幂。手算: 循环。
排除法:B 是 ;C 是 ;D 无依据。
关联 · 大指数输出(L2):同法双题。
01#include <bits/stdc++.h> 02using namespace std; 03int phi(int n) { 04 int r = n; 05 for (int i = 2; i * i <= n; i++) { 06 if (n % i == 0) { 07 r = r / i * (i - 1); 08 while (n % i == 0) n /= i; 09 } 10 } 11 if (n > 1) r = r / n * (n - 1); 12 return r; 13} 14int main() { 15 cout << phi(12); 16 return 0; 17}
单选题:程序输出是?(1~12 中与 12 互质的数:1、5、7、11 共 4 个)
考点:φ(n) 输出(M1)。
解析:(互质数 1、5、7、11)。正确答案 A。
实现要点:欧拉函数 = 分解质因数套公式 。手算:列出 1~12 检查互质。
排除法:B 是 n;C 是约数个数;D 无依据。
关联 · 欧拉函数(E3):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int p = 7, cnt = 0; 05 for (int i = 1; i < p; i++) { 06 bool ok = true; 07 for (int d = 2; d <= i; d++) 08 if (p % d == 0 && i % d == 0) ok = false; 09 if (ok) cnt++; 10 } 11 cout << cnt; 12 return 0; 13}
单选题:程序输出是?(1~6 中与 7 互质的个数 = φ(7))
考点:φ(p) = p - 1(M2)。
解析:1~6 全部与 7 互质 → 6。正确答案 A。
实现要点:素数 的 。手算:素数与所有小于它的数互质。
排除法:B 含 7 本身;C/D 无依据。
关联 · 素数模的欧拉函数(E6):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 // φ(10):1~10 中与 10 互质:1, 3, 7, 9 05 int n = 10, cnt = 0; 06 for (int i = 1; i <= n; i++) { 07 bool ok = true; 08 for (int d = 2; d <= n; d++) 09 if (n % d == 0 && i % d == 0) ok = false; 10 if (ok) cnt++; 11 } 12 cout << cnt; 13 return 0; 14}
单选题:程序输出是?
考点:欧拉函数计算(M3)。
解析:(1、3、7、9)。正确答案 A。
实现要点:。手算:枚举互质数。
排除法:B 是 n;C 是 n/2;D 无依据。
关联 · φ(n) 输出(M1):同构题。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; 06 while (n) { 07 if (n & 1) r = r * a % p; 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 // 欧拉定理:3^φ(10) ≡ 1 (mod 10),φ(10) = 4 15 cout << qpow(3, 4, 10); 16 return 0; 17}
单选题:程序输出是?()
考点:欧拉定理验证(M4)。
解析:——欧拉定理 。正确答案 A。
实现要点:欧拉定理验证 = 快速幂算 应为 1。手算:。
排除法:B/C/D 无依据。
关联 · 欧拉定理(E4):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int phi(int n) { 04 int r = n; 05 for (int i = 2; i * i <= n; i++) { 06 if (n % i == 0) { 07 ______; // r = r / i * (i - 1) 08 while (n % i == 0) n /= i; 09 } 10 } 11 if (n > 1) r = r / n * (n - 1); 12 return r; 13} 14int main() { 15 cout << phi(12); 16 return 0; 17}
单选题:横线处应填入?(使输出为 4)
考点:φ 函数填空(M5)。
解析:r = r / i * (i - 1)——质因子 贡献 。正确答案 A。
实现要点:先除后乘防溢出;while (n % i == 0) n /= i 去重质因子。手算:验证 φ(12)=4。
排除法:B 忘了除以 i;C 丢因子;D 无依据。
关联 · φ(n) 输出(M1):填空版。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 // p 素数:φ(p) = p - 1 → 欧拉定理退化为费马小定理 05 int p = 7; 06 cout << p - 1; 07 return 0; 08}
单选题:程序输出是?(φ(7) 的值)
考点:欧拉与费马(M6)。
解析:——素数模的欧拉函数值是 。正确答案 A。
实现要点:费马 = 欧拉在素数模的特例。手算:。
排除法:B 是 p;C/D 无依据。
关联 · 费马是欧拉的特例(E5):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 // 今天是星期三(记 3),问 100 天后星期几 05 int today = 3, days = 100; 06 int ans = (today + days % 7) % 7; // 0 = 星期日 07 cout << ans; 08 return 0; 09}
单选题:程序输出是?(星期三 + 100 天,0 表示星期日)
考点:周期问题(N1)。
解析:——星期五。正确答案 A。
实现要点:星期 = 起点 + 天数 mod 7。手算:。
排除法:B 忘了加;C 是起点;D 无依据。
关联 · 日期周期问题(G4):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; 06 while (n) { 07 if (n & 1) r = r * a % p; 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 // 3/2 mod 7 = 3 * inv(2) = 3 * 2^5 mod 7 15 cout << 3 * qpow(2, 5, 7) % 7; 16 return 0; 17}
单选题:程序输出是?
考点:分数取模(N2)。
解析:——。正确答案 A。
实现要点:分数取模 = 分子 × 分母逆元。手算:验证 。
排除法:B 忘了取模;C/D 无依据。
关联 · 分数取模(K5):扩展版。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; 06 while (n) { 07 if (n & 1) r = r * a % p; 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 // C(6,3) mod 7 = 6! / (3! * 3!) mod 7 = 720/36 = 20 ≡ 6 15 long long fact[7] = {1, 1, 2, 6, 24, 120, 720}; 16 long long p = 7; 17 long long c = fact[6] * qpow(fact[3], p - 2, p) % p * qpow(fact[3], p - 2, p) % p; 18 cout << c; 19 return 0; 20}
单选题:程序输出是?
考点:组合数取模(N3)。
解析:。正确答案 A。
实现要点:。手算:逆元法或直接算。
排除法:B 忘了取模;C/D 无依据。
关联 · 组合数取模(K6):扩展版。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 // 2026 年 1 月 1 日是星期四(4),2026 年共 365 天, 05 // 问 2027 年 1 月 1 日星期几:365 % 7 = 1 06 int start = 4, days = 365; 07 int ans = (start + days % 7) % 7; // 0 = 星期日 08 cout << ans; 09 return 0; 10}
单选题:程序输出是?
考点:日期星期计算(N4)。
解析:——星期五。正确答案 A。
实现要点:平年 365 天 → 星期 +1。手算:。
排除法:B 是起点;C/D 无依据。
关联 · 周期问题(N1):同法双题。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 string s = "123456789"; 05 int m = 7, r = 0; 06 for (char c : s) r = (r * 10 + (c - '0')) % m; // 逐位取模 07 cout << r; 08 return 0; 09}
单选题:程序输出是?(123456789 mod 7 = 1,因为 7×17636684 = 123456788)
考点:大数取模(N5)。
解析:逐位取模得 1()。正确答案 A。
实现要点:字符串大数取模 = r = (r * 10 + digit) % m 逐位。手算:逐位演算。
排除法:B/C/D 无依据。
关联 · 大数取模技巧(F4):字符串版。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 // 解 3x ≡ 2 (mod 7):x ≡ 2 * inv(3) = 2 * 5 = 10 ≡ 3 05 int m = 7; 06 for (int x = 0; x < m; x++) 07 if (3 * x % m == 2) { cout << x; break; } 08 return 0; 09}
单选题:程序输出是?
考点:同余方程求解(N6)。
解析::试 , ✓。正确答案 A。
实现要点:小模数试乘;大模数 。手算:。
排除法:B/C/D 代入不符。
关联 · 同余方程(A5):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int exgcd(int a, int b, int &x, int &y) { 04 if (______) { x = 1; y = 0; return a; } // 递归出口 05 int d = exgcd(b, a % b, y, x); 06 y -= a / b * x; 07 return d; 08} 09int main() { 10 int x, y; 11 cout << exgcd(48, 36, x, y); 12 return 0; 13}
单选题:横线处应填入?(使输出为 12)
考点:exgcd 填空(O1)。
解析:递归出口 b == 0。正确答案 A。
实现要点:出口时 ()。手算:验证终止。
排除法:B 出口错(a==0 时 gcd 是 b);C/D 无依据。
关联 · exgcd 求 gcd 输出(J1):填空版。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; 06 while (n) { 07 if (n & 1) r = r * a % p; 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 int a = 3, p = 7; 15 cout << qpow(a, ______, p); // 费马小定理求逆元:a^(p-2) 16 return 0; 17}
单选题:横线处应填入?(使输出为 5)
考点:费马求逆元填空(O2)。
解析:指数 p - 2。正确答案 A。
实现要点:。手算:。
排除法:B 是 p-1(结果为 1);C/D 无依据。
关联 · 费马小定理求逆元(D1):填空版。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int p = 7; 05 int inv[8] = {0}; 06 inv[1] = 1; 07 for (int i = 2; i <= 6; i++) 08 inv[i] = (long long)______ * inv[p % i] % p; // (p - p/i) * inv[p % i] 09 for (int i = 1; i <= 6; i++) cout << inv[i] << " "; 10 return 0; 11}
单选题:横线处应填入?(使输出为 1 4 5 2 3 6)
考点:递推逆元填空(O3)。
解析:(p - p / i)。正确答案 A。
实现要点:递推公式 。手算:验证 i=2 得 4。
排除法:B 加号;C 缺减;D 无依据。
关联 · 线性递推求逆元(D3):填空版。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 ______; // 底数先取模 06 while (n) { 07 if (n & 1) r = r * a % p; 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 cout << qpow(2, 10, 1000); 15 return 0; 16}
单选题:横线处应填入?(使输出为 24)
考点:快速幂取模填空(O4)。
解析:a %= p——底数先取模。正确答案 A。
实现要点:快速幂第一步底数取模、每步乘后取模。手算:验证 2^10 mod 1000 = 24。
排除法:B 取错对象;C/D 无依据。
关联 · 底数取模(L5):填空版。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; 06 while (n) { 07 if (n & 1) r = r * a % p; 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 // C(5,2) mod 7 15 long long fact[6] = {1, 1, 2, 6, 24, 120}; 16 long long p = 7; 17 long long c = fact[5] * ______ % p * qpow(fact[3], p - 2, p) % p; 18 cout << c; 19 return 0; 20}
单选题:横线处应填入?(使输出为 3——分母 2! 取逆元)
考点:组合数取模填空(O5)。
解析:qpow(fact[2], p - 2, p)——分母 2! 取逆元。正确答案 A。
实现要点:组合数三件套 = 分子阶乘 × 两个分母阶乘的逆元。手算:验证 C(5,2)≡3。
排除法:B 忘了取逆元;C 指数错;D 无依据。
关联 · 组合数取模(G2):填空版。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; 06 while (n) { 07 if (n & 1) r = r * a % p; 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 // a/b mod 7 = a * b^(7-2) mod 7 15 int a = 3, b = 2, p = 7; 16 cout << a * ______ % p; 17 return 0; 18}
单选题:横线处应填入?(使输出为 5——3/2 模 7)
考点:分数取模填空(O6)。
解析:qpow(b, p - 2, p)——分母逆元。正确答案 A。
实现要点:(p 素数)。手算:。
排除法:B 指数 p-1;C 忘了逆元;D 取错对象。
关联 · 分数取模(K5):填空版。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int a = 17, b = 5, m = 6; 05 cout << (______ ? "YES" : "NO"); // a 与 b 同余模 m 06 return 0; 07}
单选题:横线处应填入?(使输出为 YES)
考点:同余判定填空(O7)。
解析:a % m == b % m。正确答案 A。
实现要点:同余 ⇔ 余数相等。手算:。
排除法:B 反向;C 是商相等;D 无依据。
关联 · 同余判定(I2):填空版。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int a = 6, m = 12; 05 // 错误:gcd(6, 12) = 6 != 1,6 模 12 无逆元, 06 // "除以 6" 在模 12 意义下不合法 07 cout << "division invalid"; 08 return 0; 09}
判断题:模 12 意义下"除以 6"不合法(6 无逆元)——直接乘"6 的逆元"会导致错误结果,因为该逆元不存在。
考点:逆元不存在仍除(P1)。
解析:——6 模 12 无逆元,"除以 6"不合法。✅ 正确
实现要点:除法取模前先查 。手算:gcd 检查。
排除法:无(判断题)。混淆点:逆元不存在时乘逆元 = 乘垃圾值。
关联 · 逆元不存在的情形(H1):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; 06 while (n) { 07 if (n & 1) r = r * a % p; 08 a = a * a % p; 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 // 错误:模 10 是合数,费马小定理不适用 15 // "inv(3) = 3^(10-2) mod 10" 是错误公式 16 cout << qpow(3, 8, 10); 17 return 0; 18}
判断题:模 10(合数)用公式 求逆元是错误的——费马小定理要求模为素数;正确做法是用 exgcd。
考点:费马误用(P2)。
解析:模 10 是合数—— 公式失效,必须 exgcd。✅ 正确
实现要点:费马法要素数模;合数模走 exgcd。手算:验证 ()。
排除法:无(判断题)。混淆点:合数模 + 费马 = 高频错误。
关联 · 费马小定理误用(H2):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int main() { 04 int m = 7; 05 cout << (10 - 11) % m << " "; // 错误:负数余数 06 cout << ((10 - 11) % m + m) % m; // 正确:规范化到 [0, m) 07 return 0; 08}
单选题:程序输出是?
考点:负数取模忘加 m(P3)。
解析:(10-11) % 7 = -1(负余数);规范化后 6。输出 -1 6。正确答案 A。
实现要点:减法取模必须 + m 再 % m。手算:。
排除法:B 两者都规范化;C/D 无依据。
关联 · 模意义下的减法(F2):错误示范。
01#include <bits/stdc++.h> 02using namespace std; 03long long qpow(long long a, long long n, long long p) { 04 long long r = 1; 05 a %= p; 06 while (n) { 07 if (n & 1) r = r * a; // 错误:漏了 % p 08 a = a * a; // 错误:漏了 % p 09 n >>= 1; 10 } 11 return r; 12} 13int main() { 14 cout << qpow(2, 30, 1000); 15 return 0; 16}
判断题:快速幂每步乘法后漏掉 % p 会导致中间结果快速溢出(如 计算路径上的中间值),结果不可靠——取模必须在每步乘法后立即执行。
考点:快速幂漏取模(P4)。
解析:每步乘法后漏 % p → 中间值指数级增长、快速溢出,结果不可靠。✅ 正确
实现要点:快速幂每步 r * a、a * a 后必须立即取模。手算:对比 2^30 的中间值规模。
排除法:无(判断题)。混淆点:溢出不是报错——是静默错误结果。
关联 · 大数取模技巧(F4):概念题代码化。
01#include <bits/stdc++.h> 02using namespace std; 03int exgcd(int a, int b, int &x, int &y) { 04 if (b == 0) { x = 1; y = 0; return a; } 05 int d = exgcd(b, a % b, y, x); // 注意:实参传 (y, x) 交换 06 y -= a / b * x; 07 return d; 08} 09int main() { 10 int x, y; 11 exgcd(48, 36, x, y); 12 cout << x << " " << y; 13 return 0; 14}
判断题:exgcd 递归调用时实参必须交换(exgcd(b, a % b, y, x))——写成 exgcd(b, a % b, x, y)(不交换)会导致系数错乱,返回的 x、y 不满足 。
考点:exgcd 系数交换错(P5)。
解析:递归实参必须 (y, x) 交换——不交换则系数错乱,不满足 。✅ 正确
实现要点:exgcd 的交换是"参数位置对调"——是算法的核心细节。手算:对比交换与否的结果。
排除法:无(判断题)。混淆点:不交换不报错,只是系数错。
关联 · exgcd 系数输出(J2):交换细节。
判断题:以下结论全部正确——"同余的加减乘可先取模再运算;除法取模须乘逆元;逆元存在当且仅当与模互质;费马小定理只在素数模下求逆元;exgcd 对互质情形恒能求逆元"。
考点:综合判断(P6)。
解析:五结论全对:同余加减乘可先取模;除法取模乘逆元;逆元存在 ⇔ 互质;费马只用于素数模;exgcd 互质恒求逆元。✅ 正确
实现要点:本章五大核心结论收官自查。手算:逐条对照本章代码。
排除法:无(判断题)。混淆点:结论之间的适用条件(素数模 vs 互质)是区分重点。
关联 · 本章全部核心结论:收官综合判断题。