小联最近在研究和约数有关的问题,他统计每个正数N的约数的个数,并以f(N)来表示。例如12的约数有1、2、3、4、6、12。因此f(12)=6。下表给出了一些f(N)的取值:
n=6 1 2 3 4 5 6
f(n) 1 2 2 3 2 4
f(n)表示n的约数个数,现在给出n,要求求出f(1)到f(n)的总和。
输入格式
输入一行,一个整数n
输出格式
输出一个整数,表示总和
输入输出样例
输入 #1 复制
3
输出 #1 复制
5
【数据范围】
n<=1000000
#include<iostream>
using namespace std;
int n,ans;
int main(void)
{
cin>>n;
for(int i=1; i<=n; i++)
ans+=n/i;
cout<<ans;
}
重点在于一个公式:
f(i)=n/i
至于公式是怎么推出来的,看我解释:
1–n的因子个数,可以看成共含有1因子的数的个数+含有2因子的数的个数+含有3因子的数的个数……+含有n因子的数的个数。
如在1~6中含有“2”这个因子的数有6/23个(2,4,6中各有一个),“3”这个因子有6/32个(3,6中各有一个),以此类推,公式就出来了