Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Кристина Смирнова Ученик (113), открыт 2 недели назад
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
2 ответа
Анонимус Мудрец (16091) 2 недели назад
 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}")
Андрей Высший разум (462238) 2 недели назад
Максимальный диапазон, удовлетворяющий маске и меньшее 10000000: [1494000; 1494999]. Но все 7 чисел в него не влезут, потому надо обработать и предыдущий диапазон, удовлетворяющий маске: [1484000; 1484999].

 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)
Похожие вопросы