К основному контенту

Задача 4 Наибольшее произведение палиндром числа

Условие задачи
Число-палиндром с обеих сторон (справа налево и слева направо) читается одинаково. Самое большое число-палиндром, полученное умножением двух двузначных чисел – 9009 = 91 × 99.
Найдите самый большой палиндром, полученный умножением двух трёхзначных чисел.

Заметка. Обычно перед решением каждой задачи я обращаюсь к математическим формулам для поиска оптимального алгоритма, но данную задачу я решил в лоб без особой математической базы. Работает медленно, но меньше 1-й минуты что удовлетворяет основному принципу решения.

Решение
Для начала напишу функцию, возвращающую True если число является палиндромом
def is_polindrom(num): raw=str(num) r_num=int(raw[::-1]) if num==r_num: return True else: return False
Принцип работы прост - перевожу в строку и при помощи конструкции извлечения среза int(raw[::-1]) получаю реверс строки преобразованный обратно в int. Остается сверить новое число с исходным.
Вторая часть алгоритма тоже в лоб

pol=[] for i in range(100,1000): for j in range(100,1000): if is_polindrom(i*j)==True: pol.append(i*j) print(max(pol))

В цикле перебираю все возможные варианты умножений числел от 100 до 999 и в список pol вывожу все возможные полиномы (их там, к стати 2470 чисел). Осталось только при помощи функции max вывести максимальное значение списка
Ответ на задачу
906609

Популярные сообщения из этого блога

Задача №3 Наибольший простой делитель

Условие задачи Простые делители числа 13195 - это 5, 7, 13 и 29. Каков самый большой делитель числа 600851475143, являющийся простым числом? Решение Простым числом, является натуральное число больше единицы, которое имеет 2 делителя - 1 и само себя.  Для начала найдем все простые делители необходимого числа.  Чтобы сократить поиск будем перебирать до квадратного корня  600851475143 округленного вверх  ( функцией  math.ceil) Перебор будем вести начиная с числа 3. Если i делит число на цело, рекурсивно обращаемся к функции issimple c аргументом i. Функция issimple возвращает пустой список если число является простым. В этом случае число попадает в результирующий список Далее остается только вернуть максимальное значение массива простых чисел, которые нацело делят число 600851475143  Код Python import math def issimple(a): r=math.ceil(math.sqrt(a)) lst=[] for i in range(3,r): if a%i==0: if issimple(i)==[]: lst.app

Задача №1 Сумма чисел, кратных 3 м и 5-ти

 . Задача №1 Если выписать все натуральные числа меньше 10, кратные 3 или 5, то получим 3, 5, 6 и 9. Сумма этих чисел - 23. Найдите сумму всех чисел меньше 1000, кратных 3 или 5. Решение

Задача 21. Дружественные числа

Пусть d( n ) определяется как сумма делителей  n  (числа меньше  n , делящие  n  нацело). Если d( a ) =  b  и d( b ) =  a , где  a  ≠  b , то  a  и  b  называются дружественной парой, а каждое из чисел  a  и  b  - дружественным числом. Например, делителями числа 220 являются 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 и 110, поэтому d(220) = 284. Делители 284 - 1, 2, 4, 71, 142, поэтому d(284) = 220. Подсчитайте сумму всех дружественных чисел меньше 10000. Решение Для начала определим функцию, которая будет возвращать сумму делителей числа: def get_sum(n):     s=0     for i in range(1,n):         if n%i==0:             s+=i     return s Думаю не требует объяснений все довольно тривиально Далее определяем функцию, возвращающую список дружественных чисел до числа n:   def gen_friendlys(n):     res=[]     for i in range(1,n):         if i not in res:             tmp=get_sum(i)             if i==get_sum(tmp) and i!=tmp:                 res.append(i)                 res.