#include int sankaku(int k) { int num = k * (k + 1) / 2; return num; } int main(void) { int N; int tri[10000]; int tri1, tri2; 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++; tri1 = tri[k]; if (N == tri1) { printf("1\n"); return 1; } m = k - 1; do{ m++; tri2 = tri[k] + tri[m]; if (N == tri2) { printf("2\n"); return 2; } } while (N > tri2); } while (N > tri1); printf("3\n"); return 0; }