Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих следующей маске , чтобы в сумме нетривиальных делителей разность между суммой цифр, стоящих на нечетных местах, и суммой цифр, стоящих на четных местах делилась на
, кроме того, сумма цифр суммы нетривиальных должна делиться на
. В ответ запишите количество найденных чисел.
Решение через циклы
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=str(dev(int(s))) # сумма делителей числа
summa = 0 # разность цифр стоящих на нечётных и чётных местах
for i in range(len(n)):
if i % 2 == 0: # если число стоит на нечётном месте
summa += int(n[i])
else: # если число стоит на чётном месте
summa -= int(n[i])
if abs(summa)%11==0 and int(n) % 9 == 0:
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 = str(sum(divs(x))) # сумма делителей числа
sm_odd_pos = sum(int(sm_divs[i]) for i in range(len(sm_divs)) if i % 2 == 0) # сумма цифр суммы делителей стоящих на нечётных местах
sm_even_pos = sum(int(sm_divs[i]) for i in range(len(sm_divs)) if i % 2 != 0) # сумма цифр суммы делителей стоящих на чётных местах
if abs(sm_even_pos-sm_odd_pos) % 11 == 0 and int(sm_divs) % 9 == 0:
count += 1
print(count)