Форум сайта python.su
Вот простенькая программа подсчёта количества решений уравнения 1/x + 1/y = 1/n в натуральных числах для разных n. Суть в том, что в 11-12 строках проверяется, можно ли выполнить деление нацело, и если да, то мы имеем новое решение.
Я подумал, что для подсчёта количества решений необязательно вычислять значение y, и заменил 11-12 строки на строку:
if (x * n) % (x - n) == 0:
Офлайн
Из документации:
divmod(a, b)Обратили внимание на выделенное жирным шрифтом? divmod делает минимум 2 действия, отсюда и разница по времени около в 2 раза.
Take two (non complex) numbers as arguments and return a pair of numbers consisting of their quotient and remainder when using long division. With mixed operand types, the rules for binary arithmetic operators apply. For plain and long integers, the result is the same as (a // b, a % b). For floating point numbers the result is (q, a % b), where q is usually math.floor(a / b) but may be 1 less than that. In any case q * b + a % b is very close to a, if a % b is non-zero it has the same sign as b, and 0 <= abs(a % b) < abs(b).
Офлайн
Нуу, вообще-то здесь сказано, что результат лишь будет численно равен данному кортежу. Разве не для того существует эта функция, чтобы за одну операцию деления получать частное и остаток? Косвенно ведь это подтверждается определением ассемблерной команды деления div.
Офлайн