Конечная оптимизация нюанс: Не предварительно зрело оптимизации. Каждый раз, когда вы пытаетесь оптимизировать код, проецируйте его, чтобы обеспечить его оптимизацию, и профилируйте оптимизацию на том же виде, который вы планируете оптимизировать, чтобы подтвердить, что это ускорение. Почти весь код не нуждается в оптимизации, просто чтобы дать правильный ответ.
Если вы оптимизации для малых х-у и большой а-б:
Создать массив с длиной, что наименьшее общее кратное из всех х, х + 1, х + 2 ... у. Например, для 2, 3, 4, 5 это будет 60, а не 120.
Теперь заполните этот массив логическими значениями - false первоначально для каждой ячейки, а затем для каждого числа в xy введите все записи в массиве, которые кратны этому числу с истинным.
Теперь для каждого числа а-б, индекс в массиве по модулю arraylength и если это правда, пропустить еще, если оно ложно, возвращение.
Вы можете сделать это немного быстрее, удалив из вас x коэффициенты коэффициентов y, которые являются основными факторами расширения, являются строгие надмножества простых расширений факторинга других чисел. Под этим я имею в виду - если у вас есть 2, 3, 4, 5, 4 2 * 2 строгий суперсет из 2, поэтому вы можете удалить его, и теперь наша длина массива равна 30. Для чего-то вроде 3, 4, 5, 6 однако 4 равно 2 * 2 и 6 равно 3 * 2 - 6 - это надмножество 3, поэтому мы удаляем его, но 4 не является надмножеством всего, поэтому мы его держим. LCM составляет 3 * 2 * 2 * 5 = 60 . Выполнение такого рода действий может привести к ускорению самостоятельно для больших ab, и вам может не понадобиться идти по направлению массива, если это все, что вам нужно.
Также имейте в виду, что если вы не собираетесь использовать весь результат функции каждый раз - например, возможно, вас иногда интересует только самое низкое значение - напишите его как генератор, а не как функция. Таким образом, вы можете вызвать его, пока не получите достаточное количество чисел, а затем остановите, экономя время.
Вы оптимизация для большого (б-а), больших Ь, большой (у-х), большой у или для вызова его много много раз с небольшими числами? Я подозреваю, что ответ будет меняться в зависимости от этих вопросов – Patashu
То есть часть проблемы: а, Ь, х, у, растет постепенно – JohnWO
Вы не хотите писать 1e100 вместо «1, е + 100»? Если это так, то будет очень сложно найти очень быстрый метод, поскольку набор чисел не подходит в памяти или даже жесткий диск (безусловно). Если количество чисел разумно (скажем, около 1e8, так что они вписываются в память), то быстрый доступ может быть получен с помощью торговой памяти для скорости. – EOL