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