![BZOJ1968 [Ahoi2005]COMMON 约数研究 数论 BZOJ1968 [Ahoi2005]COMMON 约数研究 数论](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - BZOJ1968
题意概括
求 ΣF(i) (1<=i<=n)N<=1000000
F(i)是i的约数个数
题解
换一个角度思考,可以把原问题转化为:
对于每一i,在1~n中有多少个倍数,所有的个数和就是答案。
那么,ΣF(i) = ∑ floor(n/i)
代码
#include <bits/stdc++.h>
int n,ans=0;
int main(){
scanf("%d",&n);
for (int i=1;i<=n;i++)
ans+=floor(n*1.0/i);
printf("%d",ans);
return 0;
}