首页 > 其他 > 详细

G - Harmonic Number (II) LightOJ - 1245

时间:2020-03-30 17:58:54      阅读:71      评论:0      收藏:0      [点我收藏+]

算是一个找规律的题目吧。 枚举前sqrt(n)个数,数i出现的次数为n/i-n/(i+1),对答案的贡献为(n/i-n/(i+1))*i。

对于sqrt后边的数,可以直接由n/i获得,并且一定只出现一次。

(数学果然博大精深~~~~)

code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(ll time){ 
    ll n;
    cin>>n;
    ll ans=0;
    ll c=sqrt(n);
    ll i;
    for(i=1;i<=c;i++){
        ans+=n/i;
        if((n/i)>(n/(i+(ll)1))) {
            ans+=((n/i-n/(i+(ll)1))*i); 
        }
    }
    i--;
    if(n/i==i) ans-=i;
    printf("Case %d: %lld\n",time,ans);
}
int main(){
    ll t;
    cin>>t;
    for(ll i=1;i<=t;i++) solve(i);    
    return 0;
}

 

G - Harmonic Number (II) LightOJ - 1245

原文:https://www.cnblogs.com/Accepting/p/12600020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!