1、http://acm.hdu.edu.cn/showproblem.php?pid=2601
2、题目大意:
给定一个n,求i*j+i+j=n,且0<i<=j<=n,求有多少种方案
3.思路:
当i=j时i取得最大值,解方程求出i最大值,循环即可
4、AC代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int t;
__int64 n,j;
int m,cnt;
scanf("%d",&t);
while(t--)
{
cnt=0;
scanf("%I64d",&n);
m=(int)(-1+sqrt((double)(1+n)));
for(int i=1;i<=m;i++)
{
if((n-i)%(i+1)==0)
{
// j=(n-i)/(i+1);//这个位置的j可能超整形,开始错在定义成int,其实注释的代码根本不需要
// if(i<=j && j>0 && j<=n )
cnt++;
}
}
printf("%d\n",cnt);
}
return 0;
}
/*
*/