計算 n/1 + n/2 + n/3 +n/4 + ... + n/n =?
一開始的思路是將n提取出來 :
原式 = n* (1+ 1/2 + 1/3 + 1/4 + ... 1/n) = n * (ln(n) + c) c是歐拉常數 ,約爲0.5772,樣例掛
然後發現這樣會多加上那些沒被整除的被省略的分數,比如 2/3 = 0,但是在上面的式子裏分數也是算上的,再次去bug,找出多加的數就行了
沒實現。。。
從網上一看,遠沒有那麼難!
然後自己敲過了:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int main(){ long long t,n; scanf("%lld",&t); while(t--){ scanf("%lld",&n); long long s = 0 ; long long id; for(long long i = 1;i<= n;){ id = n/i; s += id; if(n/id == id)i++; else{ s+=(n/id - i)*id; i = n/id + 1; } } printf("%lld\n",s); } }