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

Сообщения

БЛОГ ПЕРЕЕХАЛ

БЛОГ "Проект Эйлера на Python" наконец-то получил второй шанс на жизнь и переехал на новый адрес  https://pythonvsjs.valis.me/ В новом формате я не просто буду решать задачи проекта Эйлера на python но и сравнивать производительность Python, JavaScript, Lua, Dart, Scala,  Haskel и прочих языков программирования в решении задач Следите плиз за моим новым блогом Также подписывайтесь на мой Youtube канал  https://www.youtube.com/channel/UCLdyT4P8AA-8YpsAFfeLZZQ Там много интересных видео связанных с IT:  Как написать telegram бота за 15 минут, сделать управляемый по wifi чайник,  стоит ли учить Dart и многое другое. Все это на моем канале И для текстового сопровождения видео я сделал специальный блог blog.valis.me - где вы сможете полистать сопровождающий видео текстовый материал И чтобы не пропустить все это подписывайтесь на мой Twitter  @Denis22019055 Все спасибо! Пока! 
Недавние сообщения

Задача 22. Очки за имена

Условие: Используйте   names.txt   (правый клик и 'Save Link/Target As...'), текстовый файл размером 46 КБ, содержащий более пяти тысяч имён. Начните с сортировки в алфавитном порядке. Затем подсчитайте алфавитные значения каждого имени и умножьте это значение на порядковый номер имени в отсортированном списке для получения количества очков имени. Например, если список отсортирован по алфавиту, имя COLIN (алфавитное значение которого 3 + 15 + 12 + 9 + 14 = 53) является 938-ым в списке. Поэтому, имя COLIN получает 938 × 53 = 49714 очков. Какова сумма очков имён в файле? Решение Повторяюсь - я не очень люблю "лингвистические" задачи, но эту постараюсь решить.

Задача 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.

Задача 17 Счет букв в числительных

Условие: Если записать числа от 1 до 5 английскими словами (one, two, three, four, five), то используется 3 + 3 + 5 + 4 + 4 = 19 букв. Сколько букв понадобится для записи всех чисел от 1 до 1000 (one thousand) включительно? Решение Если честно, я не очень люблю "лингвистические" задачи за достаточно сложные условия и минимум размаха для написания красивой логики, но все же возьмусь за эту. 

Задача 14.Самая длинная последовательность Коллатца

Условие: Следующая повторяющаяся последовательность определена для множества натуральных чисел: n  →  n /2 ( n  - чётное) n  → 3 n  + 1 ( n  - нечётное) Используя описанное выше правило и начиная с 13, сгенерируется следующая последовательность: 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 Получившаяся последовательность (начиная с 13 и заканчивая 1) содержит 10 элементов. Хотя это до сих пор и не доказано (проблема Коллатца (Collatz)), предполагается, что все сгенерированные таким образом последовательности оканчиваются 1. Какой начальный элемент меньше миллиона генерирует самую длинную последовательность? Решение Гипотеза Коллатца сводится к тому что данная последовательность всегда оканчивается единицей. Если верить Википедии, то она не доказана и над проверкой гипотезы на больших числах сейчас трудятся миллионы видеокарт добровольцев вычислительной сети BOINC в рамках проекта Collatz Conjecture. Мы же будем работать с не очень большими числами и банальной рекурсии на

Задачи 13 и 16 Задачи с простыми и короткими решениями

В данной статье речь пойдет сразу о двух достаточно простых задачах из проекта Эйлера Задача 13  Найдите первые десять цифр суммы следующих ста 50-значных чисел. Решение 100 чисел 50-ти знаков -достаточно много текста чтобы помещать его в текст программы, а тем более в текст статьи. Для загрузки списка из файла я создал функцию get_list - построчно читает числа из файла и возвращает список с преобразованными в integer числами. Осталось только применить к полученному списку sum и вывести первых десять цифр, используя прием взятия среза в последней строке программы: def get_list(file,n):     f = open(file, 'r')     lst=[]     for i in range(n):          tmp=f.readline()          lst.append(int(tmp[0:50]))     return lst lst=get_list('C:\\exp\\100rows.txt',100) print(str(sum(lst))[0:10]) Задача 16 Сумма цифр степени 2 15  = 32768, сумма цифр 3 + 2 + 7 + 6 + 8 = 26. Какова сумма цифр числа 2 1000 ? Решение: еще проще задачи 13  Нам по сути

Задача 12.Треугольное число с большим количеством делителей

Условие задачи  Последовательность треугольных чисел образуется путем сложения натуральных чисел. К примеру, 7-ое треугольное число будет 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. Первые десять треугольных чисел: 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... Перечислим делители первых семи треугольных чисел:  1 : 1  3 : 1,3  6 : 1,2,3,6 10 : 1,2,5,10 15 : 1,3,5,15 21 : 1,3,7,21 28 : 1,2,4,7,14,28 Как мы видим, 28 - первое треугольное число, у которого более пяти делителей. Каково первое треугольное число, у которого более пятисот делителей? Решение  Задача состоит из 2-х этапов: - Этап 1. Собственно генерация числа - Этап 2. Поиск делителей или на математическом языке "факторизация числа.