BZOJ1968 [Ahoi2005]COMMON 约数研究 数论

欢迎访问~原文出处——博客园-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;
}

  

posted @ 2017-12-15 16:32  zzd233  阅读(264)  评论(0编辑  收藏  举报