Description
给个nnn,求111到nnn的所有数的约数个数的和~
Input
第一行一个正整数nnn
(1≤n≤108)(1\le n\le 10^8)(1≤n≤108)
Output
输出一个整数,表示答案
Sample Input
3
Sample Output
5
Solution
ans=∑i=1n⌊ni⌋ans=\sum\limits_{i=1}^n\lfloor\frac{n}{i}\rfloorans=i=1∑n⌊in⌋,分块加速或者直接求都行
Code
#include<cstdio>
using namespace std;
typedef long long ll;
int main()
{
int n;
scanf("%d",&n);
ll ans=0;
for(int i=1,pre;i<=n;i=pre+1)
{
pre=n/(n/i);
ans+=1ll*(n/i)*(pre-i+1);
}
printf("%lld\n",ans);
return 0;
}