#33. 2021-CSP-J-30

单选题 难度:未设置 通过:34 提交:50 通过率:68.00% 上传者: Turing001

题目描述

在执行完 init() 后,f 数组不是单调递增的,但 g 数组是单调递增的。( )

#include <stdio.h>

#define n 100000
#define N n + 1

int m;
int a[N], b[N], c[N], d[N];
int f[n], g[N];

void init()
{
    f[1] = g[1] = 1;
    for (int i = 2; i <= n; i++) {
        if (!a[i]) {
            b[m++] = i;
            c[i] = 1, f[i] = 2;
            d[i] = 1, g[i] = i + 1;
        }
        for (int j = 0; j < m && b[j] * i <= n; j++) {
            int k = b[j];
            a[i * k] = 1;
            if (i * k == 0) {
                c[i * k] = c[i] + 1;
                f[i * k] = f[i] / c[i * k] * (c[i * k] + 1);
                d[i * k] = d[i];
                g[i * k] = g[i] * k + d[i];
                break;
            }
            else {
                c[i * k] = 1;
                f[i * k] = 2 * f[i];
                d[i * k] = g[i];
                g[i * k] = g[i] * (k + 1);
            }
        }
    }
}

int main()
{
    init();

    int x;
    scanf("%d", &x);
    printf("%d %d", f[x], g[x]);
    return 0;
}

选项

正确

错误

分类标签