-
-
Save unilecs/a86723c109aabbc9c0663ac5080cb190 to your computer and use it in GitHub Desktop.
Задача 151: Числа Смита (@jinxonik)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" Метод расчёта с использованием строк """ | |
# Получить следующее число Смита после n | |
def next_smith_number(n): | |
from itertools import count | |
# Получить в виде кортежа список простых сомножителей числа n в виде строки и кол-во сомножителей | |
def primes_str(n): | |
s, i, c = "", 2, 0 | |
while i*i <= n: | |
while n % i == 0: | |
s += str(i) | |
c += 1 | |
n //= i | |
i += 1 | |
if n > 1: | |
s += str(n) | |
c += 1 | |
return s, c | |
# Получить сумму цифр строки s | |
def digsum(s): | |
return sum(map(int, s)) | |
# Цикл от n+1 до успешного решения | |
for x in count(n+1): | |
# Получаем строку цифр простых сомножителей и кол-во сомножителей | |
prime_str, prime_count = primes_str(x) | |
if prime_count > 1: # если кол-во > 1 (т.е. число не является простым) | |
# и сумма цифр числа x равна сумме сумм :) цифр простых сомножителей числа x... | |
if digsum(str(x)) == digsum(prime_str): | |
return x # возвращаем значение, если суммы совпадают | |
################################################################################ | |
n = 4937775 # исходное число | |
for i in range(3): # кол-во искомых чисел | |
n = next_smith_number(n) # находим следующее значение | |
print(n) # выводим его |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment