原题解链接:https://ac.nowcoder.com/discuss/149978
首先把因数个数和转化成倍数个数和,即
方法1:
利用 只有 种枚举计算。
方法2:
所求即
考虑计算 ,乘2再加上 的情况就是答案了。
而这个东西可以枚举 计算.
两个方法时间复杂度都是 。
#include<bits/stdc++.h>
using namespace std;
typedef long long s64;
int main()
{
int tt;
cin>>tt;
while(tt--)
{
int n;
cin>>n;
s64 ans=0;
for(int x=1;x*x<=n;++x)ans+=(n/x-x)*2+1;
cout<<ans<<endl;
}
}