чтобы перебирать не все подряд, а пропускать точно не дающие решений варианты комбинаций младших цифр
Это как?
Как это применить в данной задаче я даже не думал ещё, но общая идея такая: квадраты всех 10-ти цифр дают не все 10 вариантов младшей цифры, как и кубы. Значит для любого
есть некий список допустимых вариантов комбинаций младшей цифры в
и
, меньший 100 вхождений для любой младшей цифры из
, что позволяет во первых перебирать меньше разных
, во вторых перед проверкой на квадрат проверить пару-тройку-четвёрку младших цифр в
на возможность извлечения корня тоже по таблице. Возведение в куб, а я считал сразу разность кубов по формуле
чтобы не выходить за границу
для разности кубов и не морочиться с парами регистров под каждое число, требует лишь три умножения и три сложения/вычитания, это жалкие десяток тактов (на асме x64, про ЯВУ даже думать не хочу), так что тут даже и оптимизировать нечего.
Кроме того, я сразу исключал не взаимно простые
с
, это хоть и требовало делений в алгоритме Евклида, но надеюсь тормозило в среднем не сильно (правда не проверял).
-- 15.01.2020, 02:32 --Кроме того, я сразу исключал не взаимно простые
с
, это хоть и требовало делений в алгоритме Евклида, но надеюсь тормозило в среднем не сильно (правда не проверял).
Тут я лоханулся, исключение НОД ускоряет программу вдесятеро, однако.
Надо было НОД проверять в конце, это ускоряет почти втрое.
-- 15.01.2020, 02:39 --Собственно Вы в соседней теме, которую я и не читал, как раз об этом и рассуждаете, о сравнении по разным модулям, что и позволяет перебирать не все комбинации.