from fnmatch import fnmatch
def get_odd_divisors_sum(n):
"""Возвращает сумму нечётных делителей числа n."""
odd_divisor_sum = 0
for i in range(1, n + 1, 2): # Проверяем только нечётные делители
if n % i == 0:
odd_divisor_sum += i
return odd_divisor_sum
# Переменная для хранения найденных чисел
found_numbers = []
# Ищем числа, соответствующие маске
for n in range(217, 107, 217): # Ищем кратные 217 числа меньше 107
if fnmatch(str(n), '14?4*'):
found_numbers.append(n)
# Сортируем найденные числа в порядке возрастания
found_numbers.sort()
# Получаем 7 наибольших чисел и их сумму нечётных делителей
result = []
for number in found_numbers[-7:]: # Берем последние 7 чисел (наибольшие)
odd_divisor_sum = get_odd_divisors_sum(number)
result.append((number, odd_divisor_sum))
# Выводим результат
for number, odd_sum in result:
print(f"{number} {odd_sum}")
def f(n):
while n % 2 == 0: n //= 2
s, i = 0, 1
while i * i < n:
if n % i == 0: s += i + n // i
i += 2
if i * i == n: s += i
return s
t = []
for v in 1484000, 1494000:
for i in range(-v % 217, 1000, 217):
t.append([v + i, f(v + i)])
for v in t[-7:]: print(*v)
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Найдите 7 наибольших чисел, меньших 107, которые кратны 217 и удовлетворяют маске 14?4*. Выведите эти числа в порядке возрастания, справа от каждого числа выведите сумму его нечётных делителей.
(Не понимаю как найти наибольшие числа n и сумму нечётных делителей).
from fnmatch import*
def f(n):
a=[1,n]
d=2
while d*d<=n:
if n%d==0:
a.append(d)
if n//d>d:
a.append(n//d)
d+=1
return sorted(a)
k=0
for n in range(217,10**7,217):
a=f(n)
nchet=[x for x in a if x%2!=0]
if fnmatch(str(n),'14?4*')==True:
print(max(n),sum(nchet))
k+=1
if k==7:
break