林老师 · 客观题题库 · 第 23 章 费马欧拉威尔逊 · 知识细节练习

第 23 章 费马欧拉威尔逊 · 知识细节练习

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

判 分 报 告

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

费马小定理深化

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

判断题:pp 为素数且 pap \nmid a 时,ap11(modp)a^{p-1} \equiv 1 \pmod p——这就是费马小定理。

(1 分)
第 2 题 A2 未作答

费马小定理的等价形式是?

(1 分)
第 3 题 A3 未作答

费马小定理的典型应用是?

(1 分)
第 4 题 A4 未作答

判断题:费马小定理的逆命题不成立——存在合数 nn 与整数 aagcd(a,n)=1\gcd(a,n)=1)使 an11(modn)a^{n-1} \equiv 1 \pmod n

(1 分)
第 5 题 A5 未作答

"伪素数"指的是?

(1 分)
第 6 题 A6 未作答

卡迈克尔数(如 561)的特点是?

(1 分)

欧拉函数深化

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

欧拉函数 φ(n)\varphi(n) 的计算公式是?

(1 分)
第 8 题 B2 未作答

判断题:gcd(m,n)=1\gcd(m, n) = 1 时,φ(mn)=φ(m)φ(n)\varphi(mn) = \varphi(m) \varphi(n)——欧拉函数是积性函数。

(1 分)
第 9 题 B3 未作答

φ(pk)\varphi(p^k)pp 素数)等于?

(1 分)
第 10 题 B4 未作答

φ(100)\varphi(100) 等于?

(1 分)
第 11 题 B5 未作答

欧拉降幂公式是?(gcd(a,m)=1\gcd(a, m) = 1 时)

(1 分)
第 12 题 B6 未作答

欧拉定理的典型应用是?

(1 分)
第 13 题 B7 未作答

φ(9)\varphi(9) 等于?

(1 分)

威尔逊定理

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

威尔逊定理的内容是?

(1 分)
第 15 题 C2 未作答

判断题:威尔逊定理的逆命题成立——若 (n1)!1(modn)(n-1)! \equiv -1 \pmod n,则 nn 是素数。

(1 分)
第 16 题 C3 未作答

判断题:威尔逊定理给出了素数的充要条件判定——理论上可以完全判定素数,只是阶乘计算代价巨大。

(1 分)
第 17 题 C4 未作答

威尔逊定理的典型应用是?

(1 分)
第 18 题 C5 未作答

判断题:威尔逊定理判定素数需要计算 (n1)!(n-1)!——nn 稍大就不可计算,因此只用于理论推导与小规模手算,不用于实际判定。

(1 分)
第 19 题 C6 未作答

判断题:威尔逊定理是充要条件(双向),费马小定理只是必要条件(逆命题不成立)——威尔逊理论上更强,但计算上更贵。

(1 分)
第 20 题 C7 未作答

10!mod1110! \bmod 11 等于?

(1 分)

三大定理综合

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

费马、欧拉、威尔逊三大定理的正确总表是?

(1 分)
第 22 题 D2 未作答

判断题:费马要求素数模;欧拉只要求 aa 与模互质(模可合数);威尔逊是充要条件——三者的条件强度:威尔逊 > 费马 > 欧拉(适用范围欧拉最广)。

(1 分)
第 23 题 D3 未作答

模 10(合数)下做指数降幂,应选用?

(1 分)
第 24 题 D4 未作答

判断题:降幂链 = 费马(素数模)→ 欧拉(互质 + 合数模)→ 广义欧拉降幂(不互质时指数加 φ(m)\varphi(m) 的扩展形式)——难度与适用范围递增。

(1 分)
第 25 题 D5 未作答

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

(1 分)
第 26 题 D6 未作答

下列哪个命题恒为真?

(1 分)
第 27 题 D7 未作答

实际判定大整数是否为素数,工程选择是?

(1 分)

素数判定进阶

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

试除法判定素数的时间复杂度是?

(1 分)
第 29 题 E2 未作答

费马素性测试的做法是?

(1 分)
第 30 题 E3 未作答

判断题:341=11×31341 = 11 \times 31 是合数,但 23401(mod341)2^{340} \equiv 1 \pmod{341}——341 是基 2 的伪素数,费马测试会被它骗过。

(1 分)
第 31 题 E4 未作答

Miller-Rabin 测试相对费马测试的改进是?

(1 分)
第 32 题 E5 未作答

判断题:试除法与威尔逊定理都是确定性判定(结果一定正确);费马/Miller-Rabin 是概率判定(极小概率误判)。

(1 分)
第 33 题 E6 未作答

判断题:概率素性测试的"概率"指误判概率(如 Miller-Rabin 每轮误判 1/4\le 1/4,多轮后趋近 0)——不是"结果有时对有时错"。

(1 分)

模幂与降幂

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

快速幂 ana^nnn 很大)的核心思想是?

(1 分)
第 35 题 F2 未作答

判断题:gcd(a,m)=1\gcd(a, m) = 1 时,akmodma^k \bmod m 的值随 kk 呈周期性(周期整除 φ(m)\varphi(m))——这是降幂的根基。

(1 分)
第 36 题 F3 未作答

广义欧拉降幂公式是?(bφ(m)b \ge \varphi(m) 时)

(1 分)
第 37 题 F4 未作答

31000mod103^{1000} \bmod 10 等于?(φ(10)=4\varphi(10) = 43413^4 \equiv 1

(1 分)
第 38 题 F5 未作答

计算 abmodma^b \bmod mbb 是"指数塔"级大数时,正确做法是?

(1 分)
第 39 题 F6 未作答

判断题:模幂是 RSA 加密/解密的核心运算——memodnm^e \bmod ncdmodnc^d \bmod n 都靠快速幂高效完成。

(1 分)

数论综合

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

判断题:gcd(a,m)=1\gcd(a, m) = 1aamm 有逆元、欧拉定理可用的共同前提——互质是模运算的"入场券"。

(1 分)
第 41 题 G2 未作答

判断题:φ(n)\varphi(n) 统计的正是 1n1 \sim n 中与 nn 互质的数——欧拉函数是"互质"的计数函数。

(1 分)
第 42 题 G3 未作答

判断题:gcd(a,m)=1\gcd(a, m) = 1 时,满足 ak1(modm)a^k \equiv 1 \pmod m 的最小正整数 kk 称为 aamm 的阶,且 kφ(m)k \mid \varphi(m)

(1 分)
第 43 题 G4 未作答

判断题:若 ggmm 的阶等于 φ(m)\varphi(m),则 gg 称为原根——g0,g1,,gφ(m)1g^0, g^1, \ldots, g^{\varphi(m)-1} 遍历所有与 mm 互质的剩余类。

(1 分)
第 44 题 G5 未作答

判断题:离散对数问题(已知 g,yg, y,求 xx 使 gxyg^x \equiv y)计算困难——这是 Diffie-Hellman 密钥交换的安全基础。

(1 分)
第 45 题 G6 未作答

判断题:RSA(模幂+逆元)、Diffie-Hellman(离散对数)、素性测试(Miller-Rabin)——现代密码学三大支柱都建在数论之上。

(1 分)

易错综合

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

判断题:23401(mod341)2^{340} \equiv 1 \pmod{341} 但 341 是合数——"费马条件满足 ⇒ 素数"是错误的推理。

(1 分)
第 47 题 H2 未作答

判断题:pp 素数 ⇔ (p1)!1(modp)(p-1)! \equiv -1 \pmod p——两个方向都成立,方向不能只记一半。

(1 分)
第 48 题 H3 未作答

判断题:φ(12)=4\varphi(12) = 4 而不是 1111——φ(n)\varphi(n) 统计"与 nn 互质"的个数,不是 n1n-1

(1 分)
第 49 题 H4 未作答

判断题:互质降幂 ababmodφ(m)(modm)a^b \equiv a^{b \bmod \varphi(m)} \pmod m 要求 gcd(a,m)=1\gcd(a, m) = 1——不互质时必须用广义降幂(指数加 φ(m)\varphi(m))。

(1 分)
第 50 题 H5 未作答

判断题:以下结论全部正确——"费马要素数模且逆命题不成立;欧拉对互质情形恒成立;威尔逊是充要条件;伪素数能骗过费马测试但骗不过 Miller-Rabin"。

(1 分)

费马代码

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

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, 6, 7);   // 费马:2^6 mod 7
15    return 0;
16}

单选题:程序输出是?

(1 分)
第 52 题 I2 未作答

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(4, 5, 7);   // inv(4) = 4^(7-2) mod 7
15    return 0;
16}

单选题:程序输出是?(4 模 7 的逆元)

(1 分)
第 53 题 I3 未作答

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(5, 7, 7);   // 费马等价形式:a^p ≡ a (mod p)
15    return 0;
16}

单选题:程序输出是?

(1 分)
第 54 题 I4 未作答

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 n = 341;
15    cout << qpow(2, n - 1, n);   // 2^340 mod 341
16    return 0;
17}

单选题:程序输出是?(341 = 11 × 31 是合数,但它是基 2 伪素数)

(1 分)
第 55 题 I5 未作答

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 n = 15;
15    // 费马测试:检查 2^(n-1) mod n
16    cout << (qpow(2, n - 1, n) == 1 ? "MAYBE-PRIME" : "COMPOSITE");
17    return 0;
18}

单选题:程序输出是?(15 是合数,2144≢1(mod15)2^{14} \equiv 4 \not\equiv 1 \pmod{15}

(1 分)
第 56 题 I6 未作答

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,先 100 mod 6 = 4
15    cout << qpow(2, 100 % 6, 7);
16    return 0;
17}

单选题:程序输出是?(24=162(mod7)2^4 = 16 \equiv 2 \pmod 7

(1 分)

欧拉代码

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

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(100);
16    return 0;
17}

单选题:程序输出是?

(1 分)
第 58 题 J2 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    // φ(15) = φ(3) × φ(5)(3 与 5 互质)
05    int p3 = 0, p5 = 0, p15 = 0;
06    for (int i = 1; i <= 3; i++) if (3 % i == 0 || __gcd(3, i) == 1) p3 += (__gcd(3, i) == 1);
07    for (int i = 1; i <= 5; i++) p5 += (__gcd(5, i) == 1);
08    for (int i = 1; i <= 15; i++) p15 += (__gcd(15, i) == 1);
09    cout << p3 << " " << p5 << " " << p15;
10    return 0;
11}

单选题:程序输出是?(φ(3)、φ(5)、φ(15))

(1 分)
第 59 题 J3 未作答

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}

单选题:程序输出是?

(1 分)
第 60 题 J4 未作答

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^1000 mod 10:φ(10) = 4,1000 mod 4 = 0
15    cout << qpow(3, 1000 % 4, 10);
16    return 0;
17}

单选题:程序输出是?(1000mod4=01000 \bmod 4 = 0 时应取指数 4 → 34=8113^4 = 81 \equiv 1;代码输出的是 30=13^0 = 1,恰好一致)

(1 分)
第 61 题 J5 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int phi[13] = {0};
05    for (int i = 1; i <= 12; i++) phi[i] = i;
06    for (int i = 2; i <= 12; i++)
07        if (phi[i] == i)                    // i 是素数
08            for (int j = i; j <= 12; j += i)
09                phi[j] = phi[j] / i * (i - 1);
10    for (int i = 1; i <= 12; i++) cout << phi[i] << " ";
11    return 0;
12}

单选题:程序输出是?(筛法求 φ(1)~φ(12))

(1 分)
第 62 题 J6 未作答

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    // 7^100 mod 9:φ(9) = 6,100 mod 6 = 4 → 7^4 mod 9
15    cout << qpow(7, 100 % 6, 9);
16    return 0;
17}

单选题:程序输出是?(727 \equiv -27247^2 \equiv 47477^4 \equiv 7…直接算:74=24017(mod9)7^4 = 2401 \equiv 7 \pmod 9

(1 分)
拾壹

威尔逊代码

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

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int p = 7;
05    long long f = 1;
06    for (int i = 1; i <= p - 1; i++) f = f * i % p;   // (p-1)! mod p
07    cout << f;
08    return 0;
09}

单选题:程序输出是?(威尔逊:(71)!16(mod7)(7-1)! \equiv -1 \equiv 6 \pmod 7

(1 分)
第 64 题 K2 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int p = 5;
05    long long f = 1;
06    for (int i = 1; i <= p - 1; i++) f = f * i % p;
07    cout << f;
08    return 0;
09}

单选题:程序输出是?(4!=244(mod5)4! = 24 \equiv 4 \pmod 5

(1 分)
第 65 题 K3 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int n = 11;
05    long long f = 1;
06    for (int i = 1; i <= n - 1; i++) f = f * i % n;
07    cout << (f == n - 1 ? "PRIME" : "COMPOSITE");   // (n-1)! ≡ -1 判定
08    return 0;
09}

单选题:程序输出是?

(1 分)
第 66 题 K4 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    // 计算 10! mod 11
05    int p = 11;
06    long long f = 1;
07    for (int i = 1; i <= 10; i++) f = f * i % p;
08    cout << f;
09    return 0;
10}

单选题:程序输出是?

(1 分)
第 67 题 K5 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int p = 7;
05    long long f = 1;
06    for (int i = 1; i <= ______; i++) f = f * i % p;   // 计算 (p-1)!
07    cout << f;
08    return 0;
09}

单选题:横线处应填入?(使输出为 6

(1 分)
第 68 题 K6 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int n = 6;
05    long long f = 1;
06    for (int i = 1; i <= n - 1; i++) f = f * i % n;
07    cout << f;
08    return 0;
09}

单选题:程序输出是?(6 是合数,5!=1200(mod6)5! = 120 \equiv 0 \pmod 6,不是 1-1

(1 分)
第 69 题 K7 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    // 计算 20! mod 23(23 是素数)
05    int p = 23;
06    long long f = 1;
07    for (int i = 1; i <= 20; i++) f = f * i % p;
08    cout << f;
09    return 0;
10}

单选题:程序输出是?(威尔逊:22!122! \equiv -122!=20!×21×2222! = 20! \times 21 \times 2221×22(2)(1)=221 \times 22 \equiv (-2)(-1) = 2,故 20!1×211×121120! \equiv -1 \times 2^{-1} \equiv -1 \times 12 \equiv 11

(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    // 2^1000000 mod 7:φ(7) = 6,1000000 mod 6 = 4
15    cout << qpow(2, 1000000 % 6, 7);
16    return 0;
17}

单选题:程序输出是?(24=162(mod7)2^4 = 16 \equiv 2 \pmod 7

(1 分)
第 71 题 L2 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int r = 1;
05    for (int i = 1; i <= 6; i++) {       // 2^k mod 7 的循环节
06        r = r * 2 % 7;
07        cout << r << " ";
08    }
09    return 0;
10}

单选题:程序输出是?

(1 分)
第 72 题 L3 未作答

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    // 5^100 mod 12:φ(12) = 4,100 mod 4 = 0 → 5^4 ≡ 1(注意指数为 0 时取 4)
15    cout << qpow(5, 4, 12);
16    return 0;
17}

单选题:程序输出是?(52=251(mod12)5^2 = 25 \equiv 1 \pmod{12}5415^4 \equiv 1

(1 分)
第 73 题 L4 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    // φ(10) = 4
05    int exp = 2026 % 4;
06    if (exp == 0) exp = 4;      // 指数取模为 0 时取 φ(m) 本身
07    cout << exp;
08    return 0;
09}

单选题:程序输出是?(2026 = 4 × 506 + 2,余数 2 不为 0,直接输出)

(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    // 7^2026 mod 10:φ(10) = 4,2026 mod 4 = 2
15    cout << qpow(7, 2026 % 4, 10);
16    return 0;
17}

单选题:程序输出是?(72=499(mod10)7^2 = 49 \equiv 9 \pmod{10}

(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    // 3^2025 mod 7:φ(7) = 6,2025 mod 6 = 3
15    cout << qpow(3, 2025 % 6, 7);
16    return 0;
17}

单选题:程序输出是?(33=276(mod7)3^3 = 27 \equiv 6 \pmod 7

(1 分)
拾叁

素数判定代码

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

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int n = 17;
05    bool prime = true;
06    for (int i = 2; i * i <= n; i++)
07        if (n % i == 0) prime = false;
08    cout << (prime ? "YES" : "NO");
09    return 0;
10}

单选题:程序输出是?

(1 分)
第 77 题 M2 未作答

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 n = 97;   // 97 是素数
15    cout << (qpow(2, n - 1, n) == 1 ? "MAYBE-PRIME" : "COMPOSITE");
16    return 0;
17}

单选题:程序输出是?

(1 分)
第 78 题 M3 未作答

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 n = 341;
15    cout << (qpow(2, n - 1, n) == 1 ? "MAYBE-PRIME" : "COMPOSITE");
16    return 0;
17}

单选题:程序输出是?(341 = 11 × 31 是合数!但费马测试被骗过)

(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    int n = 341;
15    // Miller-Rabin:除费马检查外,还检查 x^2 ≡ 1 的非平凡平方根
16    // 341 会在二次探测环节被识破
17    cout << "COMPOSITE";   // 多轮二次探测后 341 必被识破
18    return 0;
19}

判断题:Miller-Rabin 通过二次探测识破费马测试无法识别的伪素数(如 341)——这是它比费马测试更强的关键。

(1 分)
第 80 题 M5 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    bool isp[21] = {0};
05    for (int i = 2; i <= 20; i++)
06        if (!isp[i])
07            for (int j = 2 * i; j <= 20; j += i) isp[j] = true;
08    int cnt = 0;
09    for (int i = 2; i <= 20; i++) if (!isp[i]) cnt++;
10    cout << cnt;
11    return 0;
12}

单选题:程序输出是?(2~20 的素数个数)

(1 分)
第 81 题 M6 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    // 三种判定:试除 O(sqrt(n)) 确定 / 费马 O(log n) 但会被伪素数骗 /
05    // Miller-Rabin O(k log n) 概率正确(误判率极低)
06    cout << "MR-best";
07    return 0;
08}

判断题:工程上判定大整数素性首选 Miller-Rabin——比试除快得多、比费马测试可靠得多。

(1 分)
拾肆

数论综合代码

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

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int cnt = 0;
05    for (int i = 1; i <= 12; i++)
06        if (__gcd(i, 12) == 1) cnt++;    // 统计与 12 互质的数
07    cout << cnt;
08    return 0;
09}

单选题:程序输出是?(= φ(12))

(1 分)
第 83 题 N2 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int cnt = 0;
05    for (int i = 1; i <= 9; i++)
06        if (__gcd(i, 9) == 1) cnt++;
07    cout << cnt;
08    return 0;
09}

单选题:程序输出是?(= φ(9))

(1 分)
第 84 题 N3 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    // 100! mod 7 = 0(100! 含因子 7)
05    long long f = 1;
06    for (int i = 1; i <= 100; i++) {
07        f = f * i % 7;
08        if (f == 0) break;
09    }
10    cout << f;
11    return 0;
12}

单选题:程序输出是?

(1 分)
第 85 题 N4 未作答

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:5! / (2! × 3!) = 120 / 12 = 10 ≡ 3
15    long long fact[6] = {1, 1, 2, 6, 24, 120};
16    long long p = 7;
17    cout << fact[5] * qpow(fact[2], p - 2, p) % p * qpow(fact[3], p - 2, p) % p;
18    return 0;
19}

单选题:程序输出是?

(1 分)
第 86 题 N5 未作答

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 + 3^100 mod 5:φ(5) = 4,100 mod 4 = 0
15    cout << (qpow(2, 4, 5) + qpow(3, 4, 5)) % 5;
16    return 0;
17}

单选题:程序输出是?(2412^4 \equiv 13413^4 \equiv 1,和 ≡ 2)

(1 分)
第 87 题 N6 未作答

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    // 迷你 RSA:p=3, q=5, n=15, φ(15)=8,e=3, d=3(3×3=9≡1 mod 8)
15    // 加密 2^3 mod 15,解密 8^3 mod 15 应回到 2
16    long long c = qpow(2, 3, 15);
17    cout << qpow(c, 3, 15);
18    return 0;
19}

单选题:程序输出是?(加密再解密恢复明文)

(1 分)
拾伍

完善程序

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

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 n = 97;
15    cout << (______ ? "MAYBE-PRIME" : "COMPOSITE");   // 费马测试
16    return 0;
17}

单选题:横线处应填入?(使输出为 MAYBE-PRIME

(1 分)
第 89 题 O2 未作答

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(100);
16    return 0;
17}

单选题:横线处应填入?(使输出为 40

(1 分)
第 90 题 O3 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int p = 11;
05    long long f = 1;
06    for (int i = 1; i <= p - 1; i++) f = ______;   // 阶乘逐步取模
07    cout << f;
08    return 0;
09}

单选题:横线处应填入?(使输出为 10——(111)!1(11-1)! \equiv -1

(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    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}

单选题:横线处应填入?(使输出为 2

(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        ______;                  // 底数平方
09        n >>= 1;
10    }
11    return r;
12}
13int main() {
14    cout << qpow(2, 10, 1000);
15    return 0;
16}

单选题:横线处应填入?(使输出为 24

(1 分)
第 93 题 O6 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int n = 29;
05    bool prime = true;
06    for (int i = 2; ______; i++)      // 试除到 sqrt(n)
07        if (n % i == 0) prime = false;
08    cout << (prime ? "YES" : "NO");
09    return 0;
10}

单选题:横线处应填入?(使输出为 YES

(1 分)
第 94 题 O7 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int n = 20, m = 7;
05    long long f = 1;
06    for (int i = 1; i <= n; i++) f = ______;   // 阶乘逐步取模
07    cout << f;
08    return 0;
09}

单选题:横线处应填入?(使输出为 0——20! 含因子 7)

(1 分)
拾陆

代码易错

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

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 是合数,"inv(3) = 3^(10-2) mod 10" 不成立
15    // 3^8 mod 10 = 1,但 3 的逆元在模 10 下是 7(3×7=21≡1)
16    cout << qpow(3, 8, 10) << " " << 7;
17    return 0;
18}

单选题:程序输出是?(费马公式给出 1,而真正的逆元是 7——公式失效)

(1 分)
第 96 题 P2 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int main() {
04    int n = 20;
05    long long f = 1;
06    for (int i = 1; i <= n - 1; i++) f = f * i;   // 错误:不取模,直接溢出
07    cout << f % n;
08    return 0;
09}

判断题:计算 (n1)!(n-1)! 不逐步取模会溢出(19!1.2×101719! \approx 1.2 \times 10^{17} 已逼近 long long 上限,再大必溢出)——威尔逊判定必须每步取模。

(1 分)
第 97 题 P3 未作答

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 与 6 不互质,不能直接用"指数对 φ(6)=2 取模"的互质降幂
15    // 2^5 mod 6 的真实值是 2;但 5 mod 2 = 1 → 2^1 = 2(碰巧对)
16    // 换成 2^4 mod 6:真实值 4;4 mod 2 = 0 → 2^0 = 1(错误)
17    cout << qpow(2, 4, 6);
18    return 0;
19}

单选题:程序输出是?(真实值 24=164(mod6)2^4 = 16 \equiv 4 \pmod 6;若误用互质降幂 4mod2=020=14 \bmod 2 = 0 \to 2^0 = 1 则错)

(1 分)
第 98 题 P4 未作答

01#include <bits/stdc++.h>
02using namespace std;
03int phi_wrong(int n) {
04    int r = n;
05    for (int i = 2; i * i <= n; i++) {
06        if (n % i == 0) {
07            r = r * (i - 1);           // 错误:忘了除以 i
08            while (n % i == 0) n /= i;
09        }
10    }
11    if (n > 1) r = r * (n - 1);
12    return r;
13}
14int main() {
15    cout << phi_wrong(12);
16    return 0;
17}

单选题:程序输出是?(正确 φ(12) = 4;公式漏"除以 i"得到错误值)

(1 分)
第 99 题 P5 未作答

01#include <bits/stdc++.h>
02using namespace std;
03long long qpow_bad(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 % p;
12}
13int main() {
14    cout << qpow_bad(2, 30, 1000);
15    return 0;
16}

判断题:快速幂漏掉每步取模,中间值 a * ar * a 会指数级膨胀、溢出 long long——最后才取模救不回来。

(1 分)
第 100 题 P6 未作答

判断题:以下结论全部正确——"费马逆命题不成立(伪素数 341);欧拉降幂互质时指数取模 φ(m);威尔逊是充要条件但阶乘昂贵;Miller-Rabin 靠二次探测识破伪素数"。

(1 分)