我们枚举x是多少数的因子时,会发现一定是一个数大于sqrt(n),另一个小于sqrt(n)
也就是说x*y可以枚举到,但y*x是枚举不到的,
对于2来说有2*1,2*2,2*3,2*4,2*5......2*n/2
那么对于2出现了n/2对乘式,那么质因子个数为2*n/2也就是x个
但是1*2是已经出现了的2*2是重复了的
对于3也就是3*1,3*2,是重复出现的,同理对于第i个数会重复出现i-1次
也就是要对n/i*2的结果减去(i-1)*2,但i*i是重复出现的,只能算一次
所以要再减一,化简后就是(n/i-i)*2+1;
#include <iostream> #include <cstring> #include <algorithm> #include <cmath> typedef long long ll; int main() { int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); ll ans = 0; for(int i = 1; i*i <= n; i ++) ans += (n/i-i+1)*2-1; cout<<ans<<endl; } return 0; }