1. 程式人生 > >Summary_(hdu 2058)_(The Sum Problem)

Summary_(hdu 2058)_(The Sum Problem)

第一次的話,超時是肯定要的/哭

大致思路:運用等差數列求和公式。

Sn = a1n+n(n-1)d/2. 此題中 d = 1. 即 Sn = a1n+n*(n-1)/2. 根據 n >=1 存在不等式2m<=n*n a1 n = Sn - n(n-1)/2. 只要列舉尋找使a1為整數的n值。

#include <cstdio>
#include <iostream>
#include  <algorithm>
#include <string.h>
#include <cmath>
using namespace std;
int main()
{
	long long int a, b, sum;
	while (cin >> a >> b && (a || b)) {
		for (int i = sqrt(2 * b); i >0; i--) {
			int s = b - i * (i - 1) / 2;
			if (s % i == 0)
				printf("[%d,%d]\n", s / i, s / i + i-1);
		}
		printf("\n",b);
	}
	return 0;
}