#P1431. Day7 数论选择与阅读(重制版·12题)

Day7 数论选择与阅读(重制版·12题)

Day7 数论选择与阅读(重制版·12题)

范围:整除、gcd/lcm、同余、质数与筛法;先判断性质,再进行计算。

一、数论基础


第 1 题

gcd(252,198)\gcd(252,198) 的值是( {{ select(1) }} )。

  • 66
  • 99
  • 1818
  • 3636

第 2 题

lcm(84,126)\operatorname{lcm}(84,126) 的值是( {{ select(2) }} )。

  • 126126
  • 168168
  • 252252
  • 504504

第 3 题

32026mod73^{2026}\bmod 7 的值是( {{ select(3) }} )。

  • 11
  • 22
  • 33
  • 44

第 4 题

满足 x4(mod6)x\equiv4\pmod 6x6(mod8)x\equiv6\pmod 8 的最小正整数 xx 是( {{ select(4) }} )。

  • 1010
  • 1414
  • 2222
  • 4646

第 5 题

360=23×32×5360=2^3\times3^2\times5 的正因数个数是( {{ select(5) }} )。

  • 1212
  • 1818
  • 2424
  • 3030

第 6 题

不超过 5050 的质数共有( {{ select(6) }} )。

  • 1313
  • 1414
  • 1515
  • 1616

第 7 题

埃氏筛在处理质数 ii 时通常从 i2i^2 开始标记,主要原因是( {{ select(7) }} )。

  • 小于 i2i^2 的合数若含因数 ii,已经被更小的质因数处理过
  • 2i2i 开始会漏掉 i2i^2
  • i2i^2 一定是第一个合数
  • 这样可以把空间复杂度降为 O(1)O(1)

二、阅读程序


程序:整体 gcd、整体 lcm 与互质数对

#include <iostream>
#include <numeric>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<long long> a(n);
    for (long long &x : a) cin >> x;

    long long g = a[0], l = a[0];
    for (int i = 1; i < n; ++i) {
        g = gcd(g, a[i]);
        l = l / gcd(l, a[i]) * a[i];
    }

    int cnt = 0;
    for (int i = 0; i < n; ++i)
        for (int j = i + 1; j < n; ++j)
            if (gcd(a[i], a[j]) == 1) ++cnt;

    cout << g << " " << l << " " << cnt;
    return 0;
}

第 8 题

输入 4 6 10 15 21 时,程序输出( {{ select(8) }} )。

  • 1 210 1
  • 1 630 1
  • 2 210 5
  • 1 210 5

第 9 题

对上述输入,第一次循环结束后变量 gl 分别为( {{ select(9) }} )。

  • 1210
  • 2210
  • 1630
  • 621

第 10 题

若把 gcd(a[i], a[j]) == 1 改为 gcd(a[i], a[j]) > 1,上述输入的 cnt 为( {{ select(10) }} )。

  • 11
  • 33
  • 55
  • 66

第 11 题

n=4n=4 时,程序显式调用 gcd 的总次数是( {{ select(11) }} )。

  • 66
  • 77
  • 99
  • 1212

第 12 题

计算 lcm 时先执行除法再执行乘法,最主要的好处是( {{ select(12) }} )。

  • 保证结果一定不超过 int 范围
  • 减小中间乘积,降低溢出风险
  • 把时间复杂度降为 O(1)O(1)
  • 避免调用 gcd