#include using namespace std; //高精度乘法模板 vector mul(vector &A, int b) { vector C; int t = 0; for (int i = 0; i < A.size() || t; i++) { if (i < A.size()) t += A[i] * b; C.push_back(t % 10); t /= 10; } while (C.size() > 1 && C.back() == 0) C.pop_back(); return C; } int n, num; int ans; vector C; int main() { cin >> n; //无脑的增大序列 for (num = 2; ans + num <= n; num++) { ans += num; C.push_back(num); } //余数 int r = n - ans; //后面的人,每人一个,如果一轮没有分完,就继续再来一轮 //举栗子:13 // 2 3 4 余数 4 // 最终分配结果 3 4 6 while (r) { for (int i = C.size() - 1; i >= 0 && r; i--) { C[i] += 1; r--; } } //输出C for (int i = 0; i < C.size(); i++) printf("%d ", C[i]); printf("\n"); //下面是高精度乘法 vector A; A.push_back(1); for (int i = 0; i < C.size(); i++) A = mul(A, C[i]); //倒着输出 for (int i = A.size() - 1; i >= 0; i--) printf("%d", A[i]); return 0; }