阅读程序-3解析

f(x)是求一个数x的约数的个数,以及约数相加之和g(x)。
例如:x=12, f(x)=6, {1,2,3,4,6,12}, g(x)=28=(1+2+3+4+6+12)
其中用到线性筛(欧拉筛)方法找质数,关于线性筛参见数据结果与算法中的数学专栏


28、若输入不为 11,把第 13 行删去不会影响输出的结果。( 正确 )

因为后面的循环都从i=2开始的,所以 f[1]和g[1]的值用不到。


 29、第 25 行的可能存在无法整除而向下取整的情况。 ( 错误)

因为25是在i%k==0的情况下,c[i * k] = c[i] + 1; 所以f[i]必然包含c[i * k]


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

f(x)和g(x)都不是单调递增函数。g(8)=1+2+4+8=15, g(9)=1+3+9=13


31、init 函数的时间复杂度为( O(n) )。

线性筛,每个合数被他最小的质因子筛除,不会重复被筛,所以时间复杂度是O(n)


32、在执行完 init() 后,f[1],f[2],f[3]…f[100] 中有(25)个等于 2。

f(x)是x的约数的个数,如果f(x)=2,就是说x的约数只有1和x,也就是x 是质数,[1, 100]内共有25个质数。


33、当输入为 1000 时,输出为( 16 2340)

f(x)=16 {1,2,4,5,8,10,20,25,40,50, 100, 125,200,250,500,1000 }
g(x)=1+2+4+5+8+10+20+25+40+50+100+125+200+250+500+1000=2340

Scroll to Top