14242. 珅泽教育CSP-J第一轮模拟考第二十套 第 22 题

珅泽教育CSP-J第一轮模拟考第二十套 第 22 题

阅读程序(二)

假定所需头文件已经包含,n 为正整数,涉及的数组下标合法,输入与运算结果均在 int 的有效范围内;讨论 square_free[60] 时取 n>60。

int solve(int n)
{
    std::vector<int> square_free(n);

    for (int i = 1; i < n; ++i)
        square_free[i] = i;

    for (int p = 2; p * p < n; ++p)
    {
        int p2 = p * p;
        for (int j = p2; j < n; j += p2)
        {
            while (square_free[j] % p2 == 0)
            {
                square_free[j] /= p2;
            }
        }
    }

    int sum = 0;
    std::vector<int> cnt(n, 0);
    for (int i = 1; i < n; ++i)
    {
        sum += cnt[square_free[i]];
        cnt[square_free[i]]++;
    }

    return sum;
}

当 n = 10 时,函数返回 4。( )

{{ select(1) }}

  • 正确
  • 错误