hdu 2601

給一個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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章