题目:
我们用D(i)表示i有多少个约数。例如 D(1)=1 D(2)=D(3)=2 D(4)=3。给定n, 求D(1)+D(2)+D(3)+...+D(n)除以1000000007(10^9+7)的余数。
思路:
1.最初的思路:拿到这道题的时候,我的第一反应是将1~n中每一个数字的因数个数求解,然后累加。期间,我也尝试了许多简化的方式,但并不奏效。
2.改进的思路:再观察一边题目,既然我们需要求出的是“约数的个数的和”,不妨不眼光从“数”转移到“约数”上。1-n中约数1出现了多少次?n次。约数2呢?n/2次。
代码展示: