給一個n,求出有多少組i,j滿足 n = i * j + i + j (0 < i <= j)
式子變形 n = i * (j + 1) + j + 1 - 1 = (i + 1) * (j + 1) - 1。 改變一下i,j的取值範圍。 n + 1 = i * j (1 < i <= j)
接着便可以用暴力找出所有的i( <= sqrt(n))。
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
int main()
{
int T;
scanf("%d", &T);
for(int kase = 1; kase <= T; kase++)
{
LL n;
scanf("%lld", &n);
n++;
int p = sqrt(n);
//printf("%d\n", p);
int q = 2, ans = 0;
while(q <= p)
{
if(n % q++ == 0) ans++;
}
printf("%d\n", ans);
}
return 0;
}