Кратна ли цифра цифре слева?
Напишите функцию, которая будет принимать число n и проверять, кратна ли каждая его цифра цифре, стоящей слева от нее. Верните массив булевых значений результатов проверок.
Примеры
divisible_by_left(73312) ➞ [False, False, True, False, True] # no element left to 7 = False # 3/7 = False # 3/3 = True # 1/3 = False # 2/1 = True divisible_by_left(1) ➞ [False] divisible_by_left(635) ➞ [False, False, False]
Примечание: массив всегда будет начинаться с False, поскольку слева от первой цифры ничего нет.
Варианты решений
def divisible_by_left(n): n = str(n) res = [False] for i in range(1,len(n)): if int(n[i-1]) == 0 or int(n[i]) % int(n[i-1]) != 0: res.append(False) else: res.append(True) return res
def divisible_by_left(n): Answer = [] Answer.append(False) Text = str(n) First = 0 Second = 1 Length = len(Text) while (Second < Length): Top = int(Text[Second]) Bottom = int(Text[First]) if (Bottom == 0) or (Top % Bottom != 0): Answer.append(False) First += 1 Second += 1 else: Answer.append(True) First += 1 Second += 1 return Answer
Как проверить кратность числа в python


Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
как узнать кратность чисел на python [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 3 года назад .
Как можно найти все числа меньше 1000 кратные 3 и 5 с помощью кода на python
Отслеживать
Умник Умник
задан 5 ноя 2020 в 13:45
Умник Умник Умник Умник
11 1 1 золотой знак 1 1 серебряный знак 2 2 бронзовых знака
Т.е. делится ли число на 15?
– user361068
5 ноя 2020 в 13:48
Можно сразу на 15 проверять или даже сразу с шагом 15 пробегать, как заметил EOF, либо в лоб: print([n for n in range(100) if n % 3 == 0 and n % 5 == 0]) (если хотите что-то этим сказать)
5 ноя 2020 в 13:52
Я перепутал вот такая задача
5 ноя 2020 в 14:09
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
for x in range(15, 1000, 15): print(x)
Отслеживать
ответ дан 5 ноя 2020 в 13:51
user361068 user361068
-
Важное на Мете
Похожие
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.21.1314
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Какой алгоритм вычисления кратности чисел более эффективен?

Если нужно определить кратность - то берем учебник Математика, 6 класс.
Глава Признаки кратности 3, 5 и 9 с минимумом вычислений.
Если же нужно заполнить массив - то потери времени на его заполнение, да в жабоскрипте, на порядки превышают стоимость этой простенькой проверки.
Может ускорить (а может и замедлить) этот процесс замена в цикле ++i на прибавление того числа, которое действительно надо прибавить для получения следующего кратного - оно циклично повторяется: [3, 2, 1, 3, 1, 2, 3]. Проверка уберется, но вычислений, на самом деле, только прибавится. Зато без ветвления и пустых циклов.
Ответ написан более двух лет назад
Нравится 4 1 комментарий

но вычислений, на самом деле, только прибавится.
С чего это вдруг?
Во-первых, количество итераций уменьшится в несколько раз.
Во-вторых, уберутся проверки на кратность 3 и 5. И остаток от деления останется лишь один, для высчитывания следующего индекса порядка. То есть останется лишь одна проверка на размер текущей суммы.
Wataru @wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Судя по названию функции (sum) вам надо найти сумму чисел. Это делается в одно действие без циклов вообще.
Если бы были нужны только числа делящееся на 3, то их сумма - f(n, 3)=3*floor(n/3)(floor(n/3)+1)/2 . Эта формула получается вынесением 3 за скобки в сумме и дальше применением формулы армфметической прогрессии.
Чтобы взять сумму делящихся на 3 или 5 надо взять сумму делящихся на 3, прибавить сумму делящихся на 5 и вычесть сумму делящихся на 15. Потому что делящиеся на 15 были подсчитанны 2 раза в первых слагаемых. Т.е. ответ - f(n,3)+f(n,5)-f(n,15)
Ответ написан более двух лет назад
Комментировать
Нравится 3 Комментировать

Alexandroppolus @Alexandroppolus
Как вариант - cмержить последовательности 3n и 5n
https://jsfiddle.net/0rhsL1ba/
не знаю, насколько это поможет здесь, но будь числа покрупнее, точно бы ускорилось
Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать
Сергей Соколов @sergiks Куратор тега JavaScript
Цикл последовательности = 3 * 5 = 15
Можно рассчитать или захардкодить повторяющийся блок, и копировать его, добавляя i * 15, где i = 0, 1, 2, ..
В последнем блоке придется искать, на каком элементе остановиться.
Ответ написан более двух лет назад
Нравится 1 3 комментария

Проблема этого решения в том, что оно не позволяет доставать промежуточные значения, a именно в этом и заключается задача.
Если же несколько изменить это решение, чтобы запоминать числа, то в итоге получится решение Adamos.)
Сергей Соколов @sergiks Куратор тега JavaScript
WbICHA, какие ещё промежуточные?
получение всех кратных чисел
Я предлагаю что-то типа
function getSequence(n) < const length = 15; // или вычислить 3 * 5 const block = [0, 3, 5, 6, 9, 10, 12,]; // или вычислить один раз const fit = n / length; const fullBlocks = Math.floor(fit); const result = []; // кирпичи целиком for (let i = 0; i < fullBlocks; i++) result.push(. block.map((v) =>v + length * i)); // последний кирпич кусочками по одному for (let i = 0; i < block.length; i++) < const value = block[i] + length * fullBlocks; if (n < value) break; result.push(value); >return result; >

for (let i = 0; i < fullBlocks; i++) result.push(. block.map((v) =>v + length * i));
Это очевидное решение, НО тс спрашивает про более эффективный алгоритм, а это решение, как минимум в рамках жс, намного медленнее аналогов выше.
То есть моя претензия не к тому, что это не решить, а к тому, что это не решить эффективно.
