0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 3
|
||||||
1 | ||||||
Нужен совет по оптимизации кода08.11.2018, 16:15. Показов 602. Ответов 5
Метки нет (Все метки)
Ребят, вот столкнулся с задачей написать небольшой код по нахождению наибольшего числа-палиндрома из определенного диапазона произведения простых пятизначных сомножителей. Работает корректно, но чертовски долго, что, в принципе и логично, ведь количество итераций из-за заданного диапазона весьма внушающее. Функция проверки на простоту максимально быстрая, на палиндром в целом никаких ресурсов и не кушает, вопрос конкретно в умножении всех (простых!)множителей.
Может кто посоветовать как это дело ускорить?
0
|
08.11.2018, 16:15 | |
Ответы с готовыми решениями:
5
Нужен совет в оптимизации кода Нужен совет по выбору программы или плагина для оптимизации HTML-кода Нужен совет по оптимизации Нужен совет по оптимизации |
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
|
|
08.11.2018, 16:27 | 2 |
Как минимум, можно итерировать через 1, так как все четные числа сразу можно игнорировать, они 100% не простые. Вложенный цикл не понятно, зачем начинать с 99999, числа от i до 99999 и так уже пройдены и проверены во внешнем цикле.
0
|
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 3
|
|
08.11.2018, 19:12 [ТС] | 3 |
По поводу итерации через единицу информация полезная, неплохо сократит время.
По поводу вложенного цикла : Нужны комбинации всех произведений i*j, чтобы найти максимальный палиндром.
0
|
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
|
|
09.11.2018, 15:22 | 4 |
Да. И с твоим вариантом циклов, i*j будут выполняться дважды, потому что j пройдет по тем же числам, по которым уже i ходил. В итоге ты выполнишь i*j, а потом еще j*i. И это не только дублирует умножение, но еще и проверку чисел на простоту, которых проверять уже не надо.
Добавлено через 6 минут Если еще не догоняешь. Представь, для простоты, что у тебя 99999 - простое число и 99997 - простое число. Больше нет простых. Что произойдет? сначала 99999*99999, это понятно. Потом i останется 99999, а j дойдет до 99997. Снова умножение и все дела. Что дальше? Дальше i дойдет до 99997, а j, станет 99999, так как интерация начинается сначала, а не с i. Опять умножение. Итого, мы поимеем: 99999 * 99999 99999 * 99997 99997 * 99999 99997 * 99997 Ничего не смущает?
0
|
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 3
|
|
09.11.2018, 15:50 [ТС] | 5 |
Справедливое замечание, ведь действительно так и выходит.
Хмм, а как от этого избавиться? Разделить диапазон на две половины и в каждый цикл по половине запихнуть?
0
|
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
|
|
09.11.2018, 16:34 | 6 |
0
|
09.11.2018, 16:34 | |
09.11.2018, 16:34 | |
Помогаю со студенческими работами здесь
6
Нужен совет по оптимизации Нужен совет по поводу оптимизации Нужен совет новИчку по оптимизации. Нужен совет по оптимизации сайта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |