Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Среди натуральных чисел, не превышающих , найдите все числа, где сумма всех делителей числа соответствует маске
*
. В ответе запишите количество найденных чисел.
Решение через циклы
def summa(n): # функция, которая возвращает сумму делителей
s = set()
for i in range(1, int(n**0.5)+1):
if n % i == 0:
s.add(i)
s.add(n // i)
return sum(s)
ans = 0
res = []
for i in range(1, 1000001):
num = str(summa(i)) # сумма делителей числа
if len(num) >= 3:
if num[0] == ’1’ and int(num) % 100 == 38: # проверка, что сумма делителей удовлетворяет маске
ans += 1
print(ans)
Решение через cрезы
def divs(n): # функция, которая возвращает список делителей
d = set()
for i in range(1, int(n**0.5)+1):
if n % i == 0:
d.add(i)
d.add(n // i)
return sorted(d)
count = 0
for x in range(1,10**6+1):
sm_divs = str(sum(divs(x))) # сумма делителей числа
if sm_divs[0] == ’1’ and sm_divs[-2:] == ’38’: # проверка, что сумма делителей удовлетворяет маске
count += 1
print(count)