BZOJ1968: [Ahoi2005]COMMON 约数研究
【传送门:BZOJ1968】
简要题意:
给出n,求出1的约数个数+2的约数个数+...+n的约数个数
题解:
乍一眼还挺容易理解,但是看数据范围,懵逼
好吧,说实话,我是看数据规律才知道怎么做的
但是更靠谱的是用数学方法,ans=1的n的约数和,那么其实我们直接把n/i累计起来就是答案了,比如说求约数1出现的个数就是n/1,约数2出现的个数就是n/2,十分神奇(Hanks_o大佬教的)
参考代码:
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; int main() { int n; scanf("%d",&n); int ans=0; for(int i=1;i<=n;i++) ans+=n/i; printf("%d\n",ans); return 0; }
渺渺时空,茫茫人海,与君相遇,幸甚幸甚