可以打表找规律,也可以画图理解,但我还是不会(菜 简单来说就是,要把n的复杂度降到sqrt(n) 然后前1~sqrt(n)可以暴力,后边的对于数i 有n/i-n/(i+1)个 所以最后结果就变成了 n/i+i*(n/i-n/(i+1)) i从1~sqrt(n) 但对于i=sqrt(n)时,如果n/i==i的话这个会算两次 所以最后 AC代码:
#include
<bits
/stdc
++.h
>
using namespace std
;
typedef long long
LL;
int
main()
{
int t
;cin
>>t
;
for(int j
=1;j
<=t
;j
++){
LL n
;cin
>>n
;
LL ans
=0;
LL m
=sqrt(n
);
for(LL i
=1;i
<=m
;i
++){
ans
+=n
/i
+i
*(n
/i
-n
/(i
+1));
}
if(m
==n
/m
) ans
-=m
;
cout
<<"Case "<<j
<<": "<<ans
<<endl
;
}
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-3558.html