Top.Mail.Ru
Ответы

ИНФОРМАТИКА 25 ЕГЭ!

242)(А. Агафонцев) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Найдите 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

По дате
По рейтингу
Аватар пользователя
Новичок
7мес

Максимальный диапазон, удовлетворяющий маске и меньшее 10000000: [1494000; 1494999]. Но все 7 чисел в него не влезут, потому надо обработать и предыдущий диапазон, удовлетворяющий маске: [1484000; 1484999].

123456789101112131415
 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мес
123456789101112131415161718192021222324252627282930
 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}")