https://blog.csdn.net/u011787439/article/details/82183783 大佬的博客写的很清楚 求1-n的因子个数和 就是从1-n中qu的数任意取一个数i 在1-n之间有多少是i的倍数 即[n/i] 因为n/i的结果也是 n的因数 所以可以只算 1-sqrt(n) 然后乘 2 , 因为n/i可以等于i,乘2重复计算了,还要减去这些重复计算的数 只要 i的平方小于等于n 都算重复计算的 一共重复计算了sqrt(i)*sqrt(i)个
sqrt(n)个因子每个多算了sqrt(n)次 因为是直接用n/i
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
scanf("%d",&t);
while(t--){
long long int ans=0;
long long int x=0;
scanf("%lld",&x);
//cout<<x<<endl;
long long int sq=sqrt(x);
for(long long i=1;i<=sq;i++){
ans+=x/i;
}
printf("%lld\n",2*ans-sq*sq);
}
return 0;
}