#include <iostream> using namespace std; int N, L; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> N >> L; // 이 문제는 가우스 수열을 이용해야 한다. // N을 L개의 수열로 구성한다고 할 때, // 1. L이 홀수라면 // 중간 값을 K라고 할 때, 수열은 다음과 같은 형식이 된다. // K - A, K - A + 1, ... , K , ... , K + A - 1, K + A (A = (L - 1) / 2) // 위의 수열을 역순으로 배치한 수열과 더해주면 2KL = 2N 즉, KL = N이 된다. // 2. L이 짝수라면 // 위와 마찬가지로 중간 값을 K라고 할 때, 수열은 다음과 같은 형식이 된다. // K - A, K - A + 1, ..., K, K + 1, ..., K + A, K + A + 1 (A = L / 2 - 1) // 가우스 수열로 더해주면 2(2K + 1)L = 2N 즉, (2K + 1)L = N이 된다. for (int i = L; i <= 100; ++i) { int k, a; if (i % 2 == 0) { if (N % i != i / 2) continue; k = N / i; a = k - (i - 1) / 2; } else { if (N % i != 0) continue; k = N / i; a = k - i / 2; } if (a >= 0) { for (int j = 0; j < i; ++j) cout << a + j << ' '; return 0; } else break; } cout << -1; } |