BDAA实验室的保研机试一道题,有时间限制。
1. 求每个数的因子数再求和:超时
2. 思想转换:统计每个数在 1 到 N 中作为因子出现的次数,从而避免对每个数进行因子分解,将时间复杂度优化到O(N)。( 没想到 :( )
#include <stdio.h>int main() {int N;// 读取输入的 Nscanf("%d", &N);int sum = 0;// 遍历 1 到 N 的每个数 kfor (int k = 1; k <= N; k++) {// 计算 k 在 1 到 N 中作为因子出现的次数并累加到 sum 中sum += N / k;}// 输出结果printf("%d\n", sum);return 0;
}