原式可以化成(i + 1) * (j + 1) = N + 1; 因为i, j > 0, 所以问题转换成了求N + 1的大于等于2的所有因子个数(不包括本身)。比如N = 5,则因子为2, 3,但是只属于一种情况,因为2*3 = 3*2.。要用sqrt,否则易超时。
附ac代码:
#include <stdio.h>
#include <math.h>
int main(){
int t, count, m;
long long n, i;
scanf("%d", &t);
while(t-- && scanf("%lld", &n)){
count = 0;
++n;
m = (int)sqrt(n);
for(i = 2; i <= m; ++i)
if(n % i == 0) ++count;
printf("%d\n", count);
}
return 0;
}