Иногда описание онлайн-вызова кода достаточно удалено из решения, оно может квалифицироваться как неверное направление .
Чаще всего, когда вы обнаружите, что ваш код отлично решение истекло, никакая оптимизация не собирается это исправить. Обычно это означает, что вам нужно переосмыслить алгоритм базового c.
Для меня "а-ха!" настал момент, когда я понял, что:
ProperFractions(a*b) == ProperFractions(a) * ProperFractions(b)
Соедините это с фактом для любого простого числа p, ProperFractions(p) == p-1
, и у нас есть четкое указание на то, что вы могли бы делить и победить. (Scala решение в 9 строках кода.)