Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих маске , у которых сумма нетривиальных делителей больше самого числа? В ответ запишите количество чисел.
Решение через циклы
def dev(n): # функция, которая возвращает сумму нетривиальных делителей числа
s=0
for i in range(2,int(n**0.5)+1):
if n%i==0:
s+=i
if n//i!=i:
s+=n//i
return s
counter=0
for a1 in (’0123456789’):
for a2 in (’0123456789’):
s=’123’+a1+’654’+a2 # формируем число, удовлетворяющее маске
n=int(s)
if dev(n)>n:
counter+=1
print(counter)
Решение через срезы
def divs(n): # функция, которая возвращает список делителей числа
d = set()
for i in range(2,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(12306540,12396549+1):
n = str(x)
if ’123’ in n[:3] and ’654’ in n[4:7]: # проверка, что число удовлетворяет маске
sm_divs = sum(divs(x)) # сумма делителей числа
if sm_divs > x:
count += 1
print(count)