挺有趣的一道题。
求出前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;
}