14243. 珅泽教育CSP-J第一轮模拟考第二十套 第 23 题
珅泽教育CSP-J第一轮模拟考第二十套 第 23 题
阅读程序(二)
假定所需头文件已经包含,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 = 101 时,函数返回 105。( )
{{ select(1) }}
- 正确
- 错误