Разбор задания 25 ЕГЭ по информатике 2025

  • pdf
  • 08.02.2025
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Задание-25-Обработка-целочисленной-информации-Маски-и-Делители (1).pdf

Задание 25.

Обработка целочисленной информации.

1. Делители 2. Маски

Задание 55821

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: — символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Среди натуральных чисел, не превышающих 𝟏𝟎𝟖, найдите все числа, соответствующие маске 12??36*1, делящиеся на 273 без остатка.

В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им результаты деления этих чисел на 273.

# берем из библиотеки fnmatch все функции from fnmatch import *

# берем диапазон от 273 до 10**8+1 с шагом 273 for i in range(273, 10**8+1, 273):

if fnmatch(str(i), '12??36*1'):

print(i, i//273)

Answer:

1271361 4657

12633621 46277

12663651 46387 12693681 46497


 

Задание 13440 kompege

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: — символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Среди натуральных чисел, не превышающих 𝟏𝟎𝟗, найдите все числа, соответствующие маске 85*16?4, делящиеся на 2658 без остатка.

В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие результаты деления этих чисел на 2658.

from fnmatch import * for i in range(2658, 10**9+1, 2658):

if fnmatch(str(i), '85*16?4'):

print(i, i//2658)

Answer:

85781634 32273

850461654 319963 851471694 320343 852521604 320738

853531644 321118

854541684 321498

856601634 322273

857611674 322653 859671624 323428


 

Задание 60267

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: — символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Среди натуральных чисел, не превышающих 𝟏𝟎𝟏𝟎, найдите все числа, соответствующие маске 1?2157*4, делящиеся на 2024 без остатка.

В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им результаты деления этих чисел на 2024.

from fnmatch import * for i in range(2024, 10**10+1, 2024):

if fnmatch(str(i), '1?2157*4'):

print(i, i//2024)

Answer:

142157664 70236

1021575544 504731

1121571264 554136

1221577104 603546

1321572824 652951

1421578664 702361

1521574384 751766

1621570104 801171

1721575944 850581

1821571664 899986 1921577504 949396


 

Задание №11814 (Л. Шастин)

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

   символ «?» означает ровно одну произвольную цифру;

   символ «#» означает последовательность из ровно трёх произвольных цифр.

from fnmatch import * for i in range(1777, 10**10+1, 1777): s = str(i)

#   так как # - это ровно три цифры, а ? – одна цифра, то маска 21#68?79 будет иметь длину строки - 10 if len(s) == 10 and fnmatch(s, '21*68?79'):

print(i, i//1777)

Например, маске 123#4?5 соответствуют числа 123333405 и 123001405.

Среди натуральных чисел, не превышающих 𝟏𝟎𝟏𝟎 , найдите все числа, соответствующие маске 21#68?79, делящиеся на 1777 без остатка.

В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на 1777.

Answer:

2110768579 1187827

2135468879 1201727

2137068179 1202627

2161768479 1216527

2186468779 1230427 2188068079 1231327

Задание 8481 (В. Рыбальченко)

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: - символ «?» означает ровно одну произвольную цифру;

- символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Например, маске 13*4?5 соответствуют числа 13405 и 1300425.

Найдите все натуральные числа меньшие 𝟏𝟎𝟖, которые кратны 237, соответствуют маске «81?2*80», но не соответствуют маске «*9*».

В ответ в первом столбике перечислите все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на 237.

from fnmatch import * for i in range(237, 10**8+1, 237):

if fnmatch(str(i), '81?2*80') and not fnmatch(str(i), '*9*'):

print(i, i//237)

 

Answer:

815280 3440

8162280 34440

81324180 343140

81727080 344840 81821880 345240

 


 

Задание №71914 (сайт К. Полякова)

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: — символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Например, маске 123*4?5 соответствуют числа 123405 и 12300425.

Среди натуральных чисел, меньших 109, найдите числа, удовлетворяющих маске 7*15?3*7 и делящиеся на 2267, у которых сумма цифр – простое число.

Запишите в ответе найденные числа в порядке возрастания, справа от каждого числа запишите частное от его деления на 2267.

def f(n): #  проверка на простое число d = 0 for i in range(2, int(n**0.5)+1):

if n%i == 0: d += 1    

if d == 0:

return 1

from fnmatch import * for i in range(2267, 10**9+1, 2267):

if fnmatch(str(i), '7*15?3*7'):

s = sum(map(int, str(i))) if f(s):

print(i, i//2267)

Answer:

71503447 31541

72115537 31811

721543027 318281

748815037 330311 752215537 331811 781573187 344761

 


Задание №27422

for i in range(174457, 174505+1):

k = 0 s = [] for j in range(2, i):

if i % j == 0: k += 1

s.append(j) if k > 2:

break

if k == 2:

 

Answer:

3 58153 7 24923 59 2957

13 13421 149 1171

5 34897 211 827

2 87251

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [174457; 174505], числа, имеющие ровно два различных натуральных делителя, не считая единицы и самого числа. Для каждого найденного числа запишите эти два делителя в два соседних столбца на экране с новой строки в порядке возрастания произведения этих двух делителей. Делители в строке также должны следовать в порядке возрастания.

Например, в диапазоне [5; 9] ровно два различных натуральных делителя имеют числа 6 и 8, поэтому для этого диапазона вывод на экране должна содержать следующие значения:

2 3

2 4

Задание №27851

for i in range(210235, 210300+1):

k = 0 s = [] for j in range(2, i):

if i % j == 0: k += 1

s.append(j) if k > 4:

break

if k == 4:

Answer:

2 4 52561 105122

2 4 52567 105134

2 4 52571 105142

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [210 235; 210 300], числа, имеющие ровно четыре различных натуральных делителя, не считая единицы и самого числа. Для каждого найденного числа запишите эти четыре делителя в четыре соседних столбца на экране с новой строки. Делители в строке должны следовать в порядке возрастания.

Например, в диапазоне [10; 16] ровно четыре различных натуральных делителя имеет число 12, поэтому для этого диапазона вывод на экране должна содержать следующие значения: 2 3 4 6

Задание №27855

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [95632; 95700], числа, имеющие ровно шесть различных чётных натуральных делителей (при этом количество нечётных делителей может быть любым). Для каждого найденного числа запишите эти шесть делителей в шесть соседних столбцов на экране с новой строки. Делители в строке должны следовать в порядке возрастания.

Например, в диапазоне [2; 48] ровно шесть чётных различных натуральных делителей имеют числа 24, 36 и 40, поэтому для этого диапазона вывод на экране должна содержать следующие значения: 2 4 6 8 12 24

2 4 6 12 18 36 2 4 8 10 20 40

for i in range(95632, 95700+1):

k = 0 s = [] for j in range(2, i+1):

if i % j == 0 and j % 2 == 0:

k += 1

s.append(j) if k > 6:

break        

if k == 6:

Answer:

2 10 50 3826 19130 95650

2 26 338 566 7358 95654

2 4 8 23918 47836 95672

 


Задание №33104

Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Например, у числа 6 есть два нетривиальных делителя: 2 и 3. Найдите все натуральные числа, принадлежащие отрезку [289123456; 389123456] и имеющие ровно три нетривиальных делителя. Для каждого найденного числа запишите в ответе его наибольший нетривиальный делитель. Ответы расположите в порядке возрастания. Например, в диапазоне [5; 16] ровно три различных натуральных делителя имеет число 16, поэтому для этого диапазона вывод на экране должна содержать следующие значения:

for i in range(int(289123456**0.25), int(389123456**0.25)):

for j in range(2, int(i**0.5)+1):

if i % j == 0: break else:

print(i**4, i**3)

16 8

Answer:

294499921 2248091

352275361 2571353

373301041 2685619

https://www.youtube.com/watch?v=l7tIgOt501U&t

1. Делители

Задание 47022

k = 0

m = 300000001

while True:

d = [] for i in range(int(m**0.5)+1, 1, -1):

if m % i == 0:

d.append(i)

d.append(m/i) if len(d) >= 5:

print(int(sorted(d)[-5]))

k += 1 if k == 5: break

m += 1

Пусть M(N) — пятый по величине делитель натурального числа N без учёта самого числа и единицы. Например, M(1000) = 100.

Если у числа N меньше 5 различных делителей, не считая единицы и самого числа, считаем, что M(N) = 0. Найдите 5 наименьших натуральных чисел, превышающих 300 000 000, для которых M(N) > 0. В ответе запишите найденные значения M(N) в порядке возрастания соответствующих им чисел N.

Answer:

17

1119403

151

16666667

27272728