(数论推理)Harmonic Number (II)

两盒软妹~` 提交于 2020-03-11 14:21:56

挺有趣的一道题。
求出前sqrt(n)项和:即n/1+n/2+…+n/sqrt(n)
而(n/1-n/2)就是后面项中1.x的个数
(n/2-n/3)就是后面项中2.x的个数
依次类推。。。

举两个例子:
在这里插入图片描述
n/1-n/2 = 5; 1.x
n/2-n/3 = 2 2.x
n/3-n/4 = 1 3.x <----- 重复,要减掉

在这里插入图片描述
n/1-n/2 = 10 1
n/2-n/3 = 4 2
n/3-n/4 = 1 3
n/4-n/5 = 1 4
由于n/sqrt(n) != sqrt(n)
故不存在重复的问题。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
	int t,cnt=0;
	scanf("%d", &t);
	while(t--) {
		ll n;
		scanf("%lld", &n);
		ll ans=0;
		ll x=sqrt(n);
		for(ll i=1; i<=x; i++) {
			ans+=(n/i);
			ans+=(n/i-n/(i+1))*i;
		}
		if(n/x==x) {
			ans-=x;
		}
		printf("Case %d: %lld\n",++cnt, ans);
	}
	return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!