题目描述
给一个整数n,你能告诉我有多少种方式写成:n = i * j + i + j (0 < i <= j)
输入
第一行T(<2000).接下来T行,每行一个整数n.
输出
一行一个整数。
刚开始很懵,后来突然有想法:n=i*j+i+j转换成(i+1)*(j+1)=n+1。又因为i<=j,这样就很简单了,其实先判断n+1是否是素数,可以简化运算……
#include<bits/stdc++.h>
int prime(int n)
{
int i,j;
j=(int)sqrt(n+0.5);
for(i=2;i<=j;i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int n,cnt,t,x,k;
scanf("%d",&t);
while(t--)
{
cnt=0;
scanf("%d",&n);
n+=1;
if(n<4)
printf("%d\n",cnt);
else
{
if(prime(n)==1)
printf("0\n");
else
{
k=(int)sqrt(n+0.5);
for(x=2; x<=k; x++)
{
if(n%x==0)
cnt++;
}
printf("%d\n",cnt);
}
}
}
return 0;
}