#include int sankaku(int k) { int num = k * (k + 1) / 2; return num; } int main(void) { int N; int tri[10000]; int k = 0; int m = 0; scanf("%d", &N); tri[0] = 0; for (int j = 1; tri[j-1] < 1000000; j++) { tri[j] = sankaku(j); } //1つか2つの三角数のどちらであるかを判定 do{ k++; if (N == tri[k]) { printf("1\n"); return 1; } m = k - 1; do{ m++; if (N == tri[k] + tri[m]) { printf("2\n"); return 2; } } while (N > tri[k] + tri[m]); } while (N > tri[k]); printf("3\n"); return 0; }