Кратко: количество вариантов равно
\[ \left\lfloor \frac{n^2+3}{12} \right\rfloor \]
Поэтому перебирать \(a,b,c\) не нужно — решение работает за \(O(1)\).
import sys
def main():
n = int(sys.stdin.buffer.readline())
ans = (n * n + 3) // 12
print(ans)
if __name__ == "__main__":
main()
Почему формула такая:
- Нужны тройки \(a \le b \le c\), \(a,b,c \ge 1\), \(a+b+c=n\).
- Зафиксируем \(a\). Тогда \(b\) может принимать значения от \(a\) до \(\lfloor(n-a)/2\rfloor\), потому что \(b \le c\).
- Количество подходящих \(b\) при данном \(a\): \[ \left\lfloor\frac{n-a}{2}\right\rfloor-a+1 \]
- Суммируя это по \(a=1,\dots,\lfloor n/3\rfloor\) и упрощая сумму, получаем \[ \left\lfloor\frac{n^2+3}{12}\right\rfloor. \]
Проверка для \(n=7\):
\[ \frac{7^2+3}{12}=\frac{52}{12}=4 \]
и действительно подходят:
\[ 1+1+5,\quad 1+2+4,\quad 1+3+3,\quad 2+2+3. \]
Сложность: \(O(1)\) по времени и \(O(1)\) по памяти. Python автоматически хранит большие целые числа, поэтому переполнение не возникнет.
