林老师 · 客观题题库 · 第 22 章 同余与逆元 · 知识细节练习

第 22 章 同余与逆元 · 知识细节练习

100 题 · 每题对应一个知识细节 · 全部原创
真题
复刻
试卷编号ORIG-第22章同余与逆元-知识细节练习
题目总数100 题 · 100 分
试卷类型客观题
考生须知:
① 本卷共 16 大部分,合计 100 题 · 100 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 100 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

同余式基础

6 QUESTIONS · 2 POINTS EACH
第 1 题 A1 未作答

ab(modm)a \equiv b \pmod m 的定义是?

(1 分)
第 2 题 A2 未作答

ab(modm)a \equiv b \pmod mcd(modm)c \equiv d \pmod m,则下列恒成立的是?

(1 分)
第 3 题 A3 未作答

判断题:同余关系具有自反性(aaa \equiv a)、对称性(若 aba \equiv bbab \equiv a)和传递性(若 aba \equiv bbcb \equiv caca \equiv c)——它是等价关系。

(1 分)
第 4 题 A4 未作答

判断题:由 acbc(modm)ac \equiv bc \pmod m 不能直接推出 ab(modm)a \equiv b \pmod m——除法(消去律)需要额外条件。

(1 分)
第 5 题 A5 未作答

同余方程 axb(modm)ax \equiv b \pmod m 有解的条件是?

(1 分)
第 6 题 A6 未作答

判断题:ab(modm)a \equiv b \pmod m 等价于"aabb 除以 mm 的余数相同"——两者可以互相翻译。

(1 分)

扩展欧几里得

7 QUESTIONS · 2 POINTS EACH
第 7 题 B1 未作答

裴蜀定理的内容是?

(1 分)
第 8 题 B2 未作答

扩展欧几里得算法的核心思想是?

(1 分)
第 9 题 B3 未作答

exgcd(48,36)\mathrm{exgcd}(48, 36) 返回的系数 (x,y)(x, y) 满足?

(1 分)
第 10 题 B4 未作答

判断题:exgcd 是 gcd(辗转相除)的扩展——它返回的最大公约数就是 gcd,同时返回一对裴蜀系数。

(1 分)
第 11 题 B5 未作答

ax+by=gcd(a,b)ax + by = \gcd(a, b) 的一组特解为 (x0,y0)(x_0, y_0),通解是?

(1 分)
第 12 题 B6 未作答

exgcd 的典型应用是?

(1 分)
第 13 题 B7 未作答

exgcd(30,12)\mathrm{exgcd}(30, 12) 的一组解是?

(1 分)

逆元定义与性质

7 QUESTIONS · 2 POINTS EACH
第 14 题 C1 未作答

mm 意义下 aa 的逆元 a1a^{-1} 满足?

(1 分)
第 15 题 C2 未作答

mm 意义下,aa 的逆元存在的充要条件是?

(1 分)
第 16 题 C3 未作答

判断题:模 mm 意义下(gcd(a,m)=1\gcd(a,m)=1),aa 的逆元在模 mm 意义下是唯一的。

(1 分)
第 17 题 C4 未作答

模意义下,除以 aa 等价于?

(1 分)
第 18 题 C5 未作答

判断题:(ab)1a1b1(modm)(ab)^{-1} \equiv a^{-1} b^{-1} \pmod m(两者都存在时)——逆元运算与乘法可交换"取逆"与"相乘"的顺序。

(1 分)
第 19 题 C6 未作答

判断题:0 在模任何模数下都没有逆元(gcd(0,m)=m1\gcd(0, m) = m \ne 1)。

(1 分)
第 20 题 C7 未作答

模 7 意义下,3 的逆元是?(3×?1(mod7)3 \times ? \equiv 1 \pmod 7

(1 分)

逆元求法

7 QUESTIONS · 2 POINTS EACH
第 21 题 D1 未作答

pp 为素数且 aa 不是 pp 的倍数时,用费马小定理求逆元的公式是?

(1 分)
第 22 题 D2 未作答

用 exgcd 求 aamm 的逆元(gcd(a,m)=1\gcd(a,m)=1)的思路是?

(1 分)
第 23 题 D3 未作答

线性递推求 1n1 \sim n 模素数 pp 的逆元,公式是?

(1 分)
第 24 题 D4 未作答

判断题:费马小定理法要求模为素数;exgcd 法只要求 gcd(a,m)=1\gcd(a, m) = 1(模可为合数);递推法适合批量求 1n1 \sim n 模素数的逆元。

(1 分)
第 25 题 D5 未作答

费马小定理 ap11(modp)a^{p-1} \equiv 1 \pmod p 成立的条件是?

(1 分)
第 26 题 D6 未作答

模数为合数(如 12)时,求逆元应选用?

(1 分)
第 27 题 D7 未作答

需要求 1,2,,n1, 2, \ldots, n 全部模素数 pp 的逆元时,最优做法是?

(1 分)

费马小定理与欧拉

6 QUESTIONS · 2 POINTS EACH
第 28 题 E1 未作答

费马小定理的内容是?

(1 分)
第 29 题 E2 未作答

判断题:费马小定理要求 pp 是素数——pp 是合数时 ap11(modp)a^{p-1} \equiv 1 \pmod p 不一定成立。

(1 分)
第 30 题 E3 未作答

欧拉函数 φ(n)\varphi(n) 的定义是?

(1 分)
第 31 题 E4 未作答

欧拉定理的内容是?

(1 分)
第 32 题 E5 未作答

判断题:pp 为素数时 φ(p)=p1\varphi(p) = p - 1,欧拉定理退化为费马小定理——费马小定理是欧拉定理的特例。

(1 分)
第 33 题 E6 未作答

φ(7)=?\varphi(7) = ?

(1 分)

模运算进阶

6 QUESTIONS · 2 POINTS EACH
第 34 题 F1 未作答

判断题:模运算中,加法与乘法可以"先各自取模再运算再取模"——(a+b)modm=((amodm)+(bmodm))modm(a + b) \bmod m = ((a \bmod m) + (b \bmod m)) \bmod m,乘法同理。

(1 分)
第 35 题 F2 未作答

模意义下 (ab)modm(a - b) \bmod m 为避免负数,应写为?

(1 分)
第 36 题 F3 未作答

模意义下 abmodm\dfrac{a}{b} \bmod mgcd(b,m)=1\gcd(b, m) = 1)应计算为?

(1 分)
第 37 题 F4 未作答

判断题:大数连乘/连加取模,应"每步运算后立即取模"防止溢出——积/和不会超过 m2m^2 级别。

(1 分)
第 38 题 F5 未作答

判断题:axb(modm)ax \equiv b \pmod m 与"存在整数 kk 使 ax=b+kmax = b + km"等价——同余方程就是带余数条件的线性方程。

(1 分)
第 39 题 F6 未作答

判断题:acbc(modm)ac \equiv bc \pmod mgcd(c,m)=1\gcd(c, m) = 1 时,可消去 ccab(modm)a \equiv b \pmod m——消去律要求 ccmm 互质。

(1 分)

同余应用

6 QUESTIONS · 2 POINTS EACH
第 40 题 G1 未作答

计算 abmodma^b \bmod mbb 很大)的常用方法是?

(1 分)
第 41 题 G2 未作答

计算 C(n,k)modpC(n, k) \bmod ppp 素数)的常用方法是?

(1 分)
第 42 题 G3 未作答

判断题:分数 abmodm\dfrac{a}{b} \bmod mgcd(b,m)=1\gcd(b,m)=1)= ab1modma \cdot b^{-1} \bmod m——分数取模就是乘分母的逆元。

(1 分)
第 43 题 G4 未作答

今天是星期三,100 天后是星期几?(用同余:100?(mod7)100 \equiv ? \pmod 7

(1 分)
第 44 题 G5 未作答

判断题:RSA 等公钥密码依赖"大数分解难"与"模幂/逆元易"的不对称——同余与逆元是现代密码学的数学基础。

(1 分)
第 45 题 G6 未作答

判断题:2x2(mod6)2x \equiv 2 \pmod 6 不能推出 x1(mod6)x \equiv 1 \pmod 6——因为 gcd(2,6)=21\gcd(2, 6) = 2 \ne 1(实际上 x1x \equiv 144)。

(1 分)

易错综合

5 QUESTIONS · 2 POINTS EACH
第 46 题 H1 未作答

判断题:模 12 意义下,6 没有逆元(gcd(6,12)=61\gcd(6, 12) = 6 \ne 1)——此时"除以 6"在模意义下不合法。

(1 分)
第 47 题 H2 未作答

判断题:模 10(合数)时用费马小定理求逆元是错误的——费马小定理要求模为素数。

(1 分)
第 48 题 H3 未作答

判断题:(10/2)mod7=5(10 / 2) \bmod 7 = 5,而 (10mod7)/(2mod7)=3/2=1(10 \bmod 7) / (2 \bmod 7) = 3 / 2 = 1——"先各自取模再除"得到错误结果,除法取模必须乘逆元。

(1 分)
第 49 题 H4 未作答

判断题:C++ 中 (-7) % 3 == -1,得到数学意义下 [0,m)[0, m) 的余数应写 ((x % m) + m) % m

(1 分)
第 50 题 H5 未作答

判断题:以下结论全部正确——"逆元存在 ⇔ 与模互质;费马小定理求逆元要求素数模;exgcd 对互质情形恒能求逆元;分数取模 = 乘分母逆元"。

(1 分)

同余运算代码

6 QUESTIONS · 2 POINTS EACH
第 51 题 I1 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int a = 17, b = 5;
05    cout << a % b;
06    return 0;
07}

单选题:程序输出是?

(1 分)
第 52 题 I2 未作答

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)

(1 分)
第 53 题 I3 未作答

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}

单选题:程序输出是?

(1 分)
第 54 题 I4 未作答

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}

单选题:程序输出是?

(1 分)
第 55 题 I5 未作答

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}

单选题:程序输出是?

(1 分)
第 56 题 I6 未作答

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}

单选题:程序输出是?

(1 分)

扩展欧几里得代码

6 QUESTIONS · 2 POINTS EACH
第 57 题 J1 未作答

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 返回的最大公约数)

(1 分)
第 58 题 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    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}

单选题:程序输出是?(满足 48x+36y=1248x + 36y = 12 的一组系数)

(1 分)
第 59 题 J3 未作答

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}

单选题:程序输出是?

(1 分)
第 60 题 J4 未作答

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}

单选题:程序输出是?(满足 30x+12y=630x + 12y = 6 的一组系数)

(1 分)
第 61 题 J5 未作答

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

(1 分)
第 62 题 J6 未作答

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}

单选题:程序输出是?(通解公式验证)

(1 分)
拾壹

逆元代码

7 QUESTIONS · 2 POINTS EACH
第 63 题 K1 未作答

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}

单选题:程序输出是?(35mod73^5 \bmod 7

(1 分)
第 64 题 K2 未作答

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 的逆元)

(1 分)
第 65 题 K3 未作答

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 的逆元序列)

(1 分)
第 66 题 K4 未作答

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))

(1 分)
第 67 题 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    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 的逆元)

(1 分)
第 68 题 K6 未作答

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}

单选题:程序输出是?(C(5,2)mod7=10mod7C(5,2) \bmod 7 = 10 \bmod 7

(1 分)
第 69 题 K7 未作答

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 的逆元)

(1 分)
拾贰

快速幂取模代码

6 QUESTIONS · 2 POINTS EACH
第 70 题 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    cout << qpow(2, 10, 1000);
15    return 0;
16}

单选题:程序输出是?

(1 分)
第 71 题 L2 未作答

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}

单选题:程序输出是?(费马:3613^6 \equiv 11004(mod6)100 \equiv 4 \pmod 634=8143^4 = 81 \equiv 4

(1 分)
第 72 题 L3 未作答

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}

单选题:程序输出是?(31,32,33,34mod73^1, 3^2, 3^3, 3^4 \bmod 7

(1 分)
第 73 题 L4 未作答

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

(1 分)
第 74 题 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    cout << qpow(1000000001LL, 1, 7);   // 底数取模后 1000000001 % 7 = 0
15    return 0;
16}

单选题:程序输出是?

(1 分)
第 75 题 L6 未作答

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}

单选题:程序输出是?(231(mod7)2^3 \equiv 1 \pmod 71001(mod3)100 \equiv 1 \pmod 321=22^1 = 2

(1 分)
拾叁

欧拉函数代码

6 QUESTIONS · 2 POINTS EACH
第 76 题 M1 未作答

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 个)

(1 分)
第 77 题 M2 未作答

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))

(1 分)
第 78 题 M3 未作答

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}

单选题:程序输出是?

(1 分)
第 79 题 M4 未作答

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}

单选题:程序输出是?(34=811(mod10)3^4 = 81 \equiv 1 \pmod{10}

(1 分)
第 80 题 M5 未作答

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

(1 分)
第 81 题 M6 未作答

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) 的值)

(1 分)
拾肆

同余应用代码

6 QUESTIONS · 2 POINTS EACH
第 82 题 N1 未作答

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 表示星期日)

(1 分)
第 83 题 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    // 3/2 mod 7 = 3 * inv(2) = 3 * 2^5 mod 7
15    cout << 3 * qpow(2, 5, 7) % 7;
16    return 0;
17}

单选题:程序输出是?

(1 分)
第 84 题 N3 未作答

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}

单选题:程序输出是?

(1 分)
第 85 题 N4 未作答

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}

单选题:程序输出是?

(1 分)
第 86 题 N5 未作答

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)

(1 分)
第 87 题 N6 未作答

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}

单选题:程序输出是?

(1 分)
拾伍

完善程序

7 QUESTIONS · 2 POINTS EACH
第 88 题 O1 未作答

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

(1 分)
第 89 题 O2 未作答

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

(1 分)
第 90 题 O3 未作答

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

(1 分)
第 91 题 O4 未作答

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

(1 分)
第 92 题 O5 未作答

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! 取逆元)

(1 分)
第 93 题 O6 未作答

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)

(1 分)
第 94 题 O7 未作答

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

(1 分)
拾陆

代码易错

6 QUESTIONS · 2 POINTS EACH
第 95 题 P1 未作答

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 的逆元"会导致错误结果,因为该逆元不存在。

(1 分)
第 96 题 P2 未作答

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(合数)用公式 ap2a^{p-2} 求逆元是错误的——费马小定理要求模为素数;正确做法是用 exgcd。

(1 分)
第 97 题 P3 未作答

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}

单选题:程序输出是?

(1 分)
第 98 题 P4 未作答

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 会导致中间结果快速溢出(如 2302^{30} 计算路径上的中间值),结果不可靠——取模必须在每步乘法后立即执行。

(1 分)
第 99 题 P5 未作答

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 不满足 ax+by=gcd(a,b)ax + by = \gcd(a, b)

(1 分)
第 100 题 P6 未作答

判断题:以下结论全部正确——"同余的加减乘可先取模再运算;除法取模须乘逆元;逆元存在当且仅当与模互质;费马小定理只在素数模下求逆元;exgcd 对互质情形恒能求逆元"。

(1 分)