原式可以化成(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; }
原文:http://blog.csdn.net/chang_mu/article/details/19234765