Задания 25 для ЕГЭ по информатике из различных источников.

ЕГЭ по информатике, линейка 25

ЕГЭ 2026. Статград. 16.12.2025

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную чётную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске \(123{*}4?5\) соответствуют числа \(123405\) и \(12300405\).

Среди натуральных чисел, не превышающих \(10^{8}\), найдите все числа, соответствующие маске \(7?23?64{*}8\), делящиеся на \(2026\) без остатка. В ответе запишите все найденные числа в порядке возрастания.

Решение:

Python


def valid(n):
    even = '02468'
    s = str(n)
    return s[0] == '7' and s[1] in even and s[2:4] == '23' \
           and s[4] in even and s[5:7] == '64' and s[-1] == '8'

n = 70230648 + 2026 - 70230648 % 2026
for x in range(n, 10**10, 2026):
    if valid(x):
        print(x)


Ответ:
\(782386498\)
\(7023064168\)
\(7023864438\)
\(7623064068\)
\(7623864338\)

ЕГЭ 2026. ЕГКР. 13.12.2025

Напишите программу, которая перебирает целые числа, большие \(1~350~050,\) в порядке возрастания и ищет среди них такие, у которых есть натуральный делитель, оканчивающийся на \(11\) и не равный ни самому числу, ни числу \(11.\) В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце — для каждого числа соответствующий минимальный делитель, оканчивающийся на \(11,\) не равный ни самому числу, ни числу \(11.\)

Количество строк в таблице для ответа избыточно.

Решение:

Python


n = 1_350_050
q = 0

while q < 5:
    n += 1
    d = []
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d += [z for z in (x, n // x) if z != 11 and z % 100 == 11]
    if d:
        print(n, min(d))
        q += 1

Ответ:
\(1350051 \,\, 311\)
\(1350055 \,\, 270011\)
\(1350062 \,\, 511\)
\(1350063 \,\, 40911\)
\(1350066 \,\, 225011\)

ЕГЭ 2026. Крылов. Вариант 20

Пусть \(M\) — разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю.

Напишите программу, которая перебирает целые числа, меньшие \( 800~000\), в порядке убывания и ищет среди них такие, для которых значение \(M\) кратно \(23\) (нуль числу \(23\) не кратен). Вывести первые пять найденных чисел и соответствующие им значения \(M\).
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(M\).
Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(20\) \(M = 10 - 2 = 8\).

Решение:

Python


def M(n):
    d = []
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d += [x, n // x]
    return max(d) - min(d) if d else 0
    

q, n = 0, 800_000
while q < 5:
    n -= 1
    m = M(n)
    if m and m % 23 == 0:
        print(n, m)
        q += 1

Ответ:
\(799995 \,\, 266662\)
\(799990 \,\, 399993\)
\(799987 \,\, 16974\)
\(799944 \,\, 399970\)
\(799907 \,\, 27554\)

ЕГЭ 2026. Крылов. Вариант 19

Пусть \(M\) — разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю.

Напишите программу, которая перебирает целые числа, меньшие \( 800~000\), в порядке убывания и ищет среди них такие, для которых значение \(M\) кратно \(17\) (нуль числу \(17\) не кратен). Вывести первые пять найденных чисел и соответствующие им значения \(M\).
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(M\).
Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(20\) \(M = 10 - 2 = 8\).

Решение:

Python


def M(n):
    d = []
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d += [x, n // x]
    return max(d) - min(d) if d else 0
    

q, n = 0, 800_000
while q < 5:
    n -= 1
    m = M(n)
    if m and m % 17 == 0:
        print(n, m)
        q += 1

Ответ:
\(799995 \,\, 266662\)
\(799990 \,\, 399993\)
\(799967 \,\, 114274\)
\(799956 \,\, 399976\)
\(799922 \,\, 399959\)

ЕГЭ 2026. Крылов. Вариант 18

Пусть \(M\) — разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю.

Напишите программу, которая перебирает целые числа, большие \( 860~000\), в порядке возрастания и ищет среди них такие, для которых значение \(M\) оканчивается на \(30\). Вывести первые пять найденных чисел и соответствующие им значения \(M\).
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(M\).
Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(20\) \(M = 10 - 2 = 8\).

Решение:

Python


def M(n):
    d = []
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d += [x, n // x]
    return max(d) - min(d) if d else 0
    

q, n = 0, 860_000
while q < 5:
    n += 1
    m = M(n)
    if m % 100 == 30:
        print(n, m)
        q += 1

Ответ:
\(860064 \,\, 430030\)
\(860199 \,\, 286730\)
\(860264 \,\, 430130\)
\(860464 \,\, 430230\)
\(860499 \,\, 286830\)

ЕГЭ 2026. Крылов. Вариант 17

Пусть \(M\) — разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю.

Напишите программу, которая перебирает целые числа, большие \( 860~000\), в порядке возрастания и ищет среди них такие, для которых значение \(M\) оканчивается на \(18\). Вывести первые пять найденных чисел и соответствующие им значения \(M\).
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(M\).
Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(20\) \(M = 10 - 2 = 8\).

Решение:

Python


def M(n):
    d = []
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d += [x, n // x]
    if d:
        return max(d) - min(d)
    return 0

q, n = 0, 860_000
while q < 5:
    n += 1
    m = M(n)
    if m % 100 == 18:
        print(n, m)
        q += 1

Ответ:
\(860040 \,\, 430018\)
\(860163 \,\, 286718\)
\(860219 \,\, 27718\)
\(860240 \,\, 430118\)
\(860440 \,\, 430218\)

ЕГЭ 2026. Крылов. Вариант 16

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300405\).

Среди натуральных чисел, не превышающих \(10^{9}\), найдите все числа, соответствующие маске \(33*21?7\), делящиеся на \(2079\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на \(2079\). Количество строк в таблице для ответа избыточно.

Решение:

Python

Решение с использованием библиотеки fnmatch


from fnmatch import fnmatch

n = 332107 + 2079 - 332107 % 2079

for x in range(n, 10**9, 2079):
    if fnmatch(str(x), '33*21?7'):
        print(x, x // 2079)

Непосредственный перебор


for n in range(4):
    for i in range(10**n):
        for k in range(10):
            x = 33*10**(4+n) + i*10**4 + 21*100 + k*10 + 7
            if x % 2079 == 0:
                print(x, x//2079)

Ответ:
\(336222117\) \(161723\)
\(337012137\) \(162103\)
\(337802157\) \(162483\)
\(338592177\) \(162863\)
\(339382197\) \(163243\)

ЕГЭ 2026. Крылов. Вариант 15

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300405\).

Среди натуральных чисел, не превышающих \(10^{9}\), найдите все числа, соответствующие маске \(32*21?4\), делящиеся на \(2049\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на \(2049\). Количество строк в таблице для ответа избыточно.

Решение:

Python

Решение с использованием библиотеки fnmatch


from fnmatch import fnmatch

n = 322104 + 2049 - 322104 % 2049

for x in range(n, 10**9, 2049):
    if fnmatch(str(x), '32*21?4'):
        print(x, x // 2049)

Непосредственный перебор


for n in range(4):
    for i in range(10**n):
        for k in range(10):
            x = 32*10**(4+n) + i*10**4 + 21*100 + k*10 + 4
            if x % 2049 == 0:
                print(x, x//2049)

Ответ:
\(321992154\) \(157146\)
\(324082134\) \(158166\)
\(326172114\) \(159186\)
\(329102184\) \(160616\)

ЕГЭ 2026. Крылов. Вариант 14

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300405\).

Среди натуральных чисел, не превышающих \(10^{8}\), найдите все числа, соответствующие маске \(32*823\), делящиеся на \(123\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на \(123\). Количество строк в таблице для ответа избыточно.

Решение:

Python

Решение с использованием библиотеки fnmatch


from fnmatch import fnmatch

n = 32823 + 123 - 32823 % 123

for x in range(n, 10**8, 123):
    if fnmatch(str(x), '32*823'):
        print(x, x // 123)

Непосредственный перебор


for n in range(4):
    for i in range(10**n):
        x = 32 * 10**(3+n) + i * 10**3 + 823
        if x % 123 == 0:
            print(x, x//123)

Ответ:
\(32090823\) \(260901\)
\(32213823\) \(261901\)
\(32336823\) \(262901\)
\(32459823\) \(263901\)
\(32582823\) \(264901\)
\(32705823\) \(265901\)
\(32828823\) \(266901\)
\(32951823\) \(267901\)

ЕГЭ 2026. Крылов. Вариант 13

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300405\).

Среди натуральных чисел, не превышающих \(10^{8}\), найдите все числа, соответствующие маске \(11*223\), делящиеся на \(149\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на \(149\). Количество строк в таблице для ответа избыточно.

Решение:

Python

Решение с использованием библиотеки fnmatch


from fnmatch import fnmatch

n = 11223 + (149 - 11223 % 149)

for x in range(n, 10**8, 149):
    if fnmatch(str(x), '11*223'):
        print(x, x // 149)

Непосредственный перебор


for n in range(4):
    for i in range(10**n):
        x = 11*10**(3+n) + i*10**3 + 223
        if x % 149 == 0:
            print(x, x // 149)

Ответ:
\(1166223\) \(7827\)
\(11000223\) \(73827\)
\(11149223\) \(74827\)
\(11298223\) \(75827\)
\(11447223\) \(76827\)
\(11596223\) \(77827\)
\(11745223\) \(78827\)
\(11894223\) \(79827\)

ЕГЭ 2026. Крылов. Вариант 12

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

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

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

Среди натуральных чисел, не превышающих \(10^{8}\), найдите все числа, соответствующие маске \(?79?8*3\), делящиеся на \(3377\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие результаты деления этих чисел на \(3377\).

Количество строк в таблице для ответа избыточно.

Решение:

Решение:

Python


from fnmatch import fnmatch

d = 3377

for n in range(d, 10**8, d):
    if fnmatch(str(n), '?79?8*3'):
        print(n, n // d)

Ответ:
\(17928493 \quad 5309\)
\(27958183 \quad 8279\)
\(67908093 \quad 20109\)

ЕГЭ 2026. Крылов. Вариант 11

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

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

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

Среди натуральных чисел, не превышающих \(10^{8}\), найдите все числа, соответствующие маске \(?19*8?3\), делящиеся на \(5171\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие результаты деления этих чисел на \(5171\).

Количество строк в таблице для ответа избыточно.

Решение:

Python


from fnmatch import fnmatch

d = 5171

for n in range(d, 10**8, d):
    if fnmatch(str(n), '?19*8?3'):
        print(n, n // d)

Ответ:
\(11908813 \quad 2303\)
\(71995833 \quad 13923\)
\(81975863 \quad 15853\)
\(91955893 \quad 17783\)

ЕГЭ 2026. Крылов. Вариант 10

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

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

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

Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, соответствующие маске \(9*?001?1\), делящиеся на \(12007\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие результаты деления этих чисел на \(12007\).

Количество строк в таблице для ответа избыточно.

Решение:

Python


from fnmatch import fnmatch

d = 12007

for n in range(d, 10**10, d):
    if fnmatch(str(n), '9*?001?1'):
        print(n, n // d)

Ответ:
\(9098100131 \quad 757733\)
\(9201000121 \quad 766303\)
\(9303900111 \quad 774873\)
\(9406800101 \quad 783443\)
\(9681400191 \quad 806313\)
\(9784300181 \quad 814883\)
\(9887200171 \quad 823453\)
\(9990100161 \quad 832023\)

ЕГЭ 2026. Крылов. Вариант 9

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

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

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

Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, соответствующие маске \(1*34?5?9\), делящиеся на \(31007\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие результаты деления этих чисел на \(31007\).

Количество строк в таблице для ответа избыточно.

Решение:

Python


from fnmatch import fnmatch

d = 31007

for n in range(d, 10**10, d):
    if fnmatch(str(n), '1*34?5?9'):
        print(n, n // d)

Ответ:
\(1260341529 \quad 40647\)
\(1291348529 \quad 41647\)
\(1300340559 \quad 41937\)
\(1331347559 \quad 42937\)
\(1371346589 \quad 44227\)

ЕГЭ 2026. Крылов. Вариант 8

Пусть \(R\) — сумма различных натуральных делителей целого числа, не считая единицы и самого числа. Напишите программу, которая перебирает целые числа, большие \(900~000,\) в порядке возрастания и ищет среди них такие, для которых \(R\) оканчивается на \(5.\) В ответе запишите в первом столбце таблицы первые пять найденным чисел в порядке возрастания, а во втором столбце — соответствующие им значения \(R.\)

Например, для числа \(18\) \(R = 2 + 3 + 6 + 9 = 20.\)

Количество строк в таблице для ответа избыточно.

Решение:

Python


def R(n):
    d = {0}
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d.add(x)
            d.add(n // x)

    return sum(d)

q, n = 0, 900_000
while q < 5:
    n += 1
    r = R(n)
    if r % 10 == 5:
        print(n, r)
        q += 1

Ответ:
\(900010 \,\, 720025\)
\(900016 \,\, 978335\)
\(900024 \,\, 1350095\)
\(900036 \,\, 1476155\)
\(900044 \,\, 729555\)

ЕГЭ 2026. Крылов. Вариант 7

Пусть \(R\) — сумма различных натуральных делителей целого числа, не считая единицы и самого числа. Напишите программу, которая перебирает целые числа, большие \(800~000,\) в порядке возрастания и ищет среди них такие, для которых \(R\) оканчивается на \(3.\) В ответе запишите в первом столбце таблицы первые пять найденным чисел в порядке возрастания, а во втором столбце — соответствующие им значения \(R.\)

Например, для числа \(18\) \(R = 2 + 3 + 6 + 9 = 20.\)

Количество строк в таблице для ответа избыточно.

Решение:

Python


def R(n):
    d = {0}
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d.add(x)
            d.add(n // x)

    return sum(d)

q, n = 0, 800_000
while q < 5:
    n += 1
    r = R(n)
    if r % 10 == 3:
        print(n, r)
        q += 1

Ответ:
\(800002 \,\, 571453\)
\(800006 \,\, 405273\)
\(800022 \,\, 800033\)
\(800026 \,\, 403813\)
\(800032 \,\, 845023\)

ЕГЭ 2026. Крылов. Вариант 6

Пусть \(M\) — сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю. Напишите программу, которая перебирает целые числа, большие \(1~000~000,\) в порядке возрастания и ищет среди них такие, для которых \(M\) оканчивается на \(6.\) В ответе запишите в первом столбце таблицы первые пять найденным чисел в порядке возрастания, а во втором столбце — соответствующие им значения \(M.\)

Например, для числа \(30\) \(M = 2 + 15 = 17.\)

Количество строк в таблице для ответа избыточно.

Решение:

Python


def M(n):
    res = 0
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            res = x + n // x
            break
    return res

q, n = 0, 1_000_000
while q < 5:
    n += 1
    m = M(n)
    if m % 10 == 6:
        print(n, m)
        q += 1

Ответ:
\(1000008 \,\, 500006\)
\(1000009 \,\, 3706\)
\(1000013 \,\, 142866\)
\(1000028 \,\, 500016\)
\(1000029 \,\, 333346\)

ЕГЭ 2026. Крылов. Вариант 5

Напишите программу, которая перебирает целые числа, большие \(700~000,\) в порядке возрастания и ищет среди них такие, у которых есть натуральный делитель, оканчивающийся на цифру \(7\) и не равный ни самому числу, ни числу \(7.\) В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце — соответствующий минимальный делитель для каждого числа, оканчивающегося цифрой \(7,\) не равный ни самому числу, ни числу \(7.\) Количество строк в таблице избыточно.

Решение:

Python


q, n = 0, 700_000

while q < 5:
    n += 1
    d7 = []
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d7 += [z for z in (x, n // x) if z != 7 and z % 10 == 7]
    if d7:
        print(n, min(d7))
        q += 1

Ответ:
\(700002 \,\, 27\)
\(700003 \,\, 37\)
\(700005 \,\, 6087\)
\(700007 \,\, 77\)
\(700008 \,\, 29167\)

ЕГЭ 2026. Крылов. Вариант 4

Напишите программу, которая перебирает целые числа, большие \(4~000~000,\) в порядке возрастания и ищет среди них числа, представимые в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи либо цифру \(1,\) либо цифру \(2.\) В ответе в первом столбце таблицы запишите первые \(5\) найденных чисел в порядке возрастания, а во втором столбце — для каждого числа наибольший из соответствующих им найденных множителей. Количество строк в таблице избыточно.

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

q, n = 0, 4_000_000

while q < 5:
    n += 1
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            if is_prime(x) and any(z in str(x) for z in '12'):
                m = n // x
                if is_prime(m) and any(z in str(m) for z in '12'):
                    q += 1
                    print(n, m)
            break

Ответ:
\(4000001 \,\, 97561\)
\(4000006 \,\, 2000003\)
\(4000013 \,\, 210527\)
\(4000021 \,\, 2221\)
\(4000027 \,\, 2251\)

ЕГЭ 2026. Крылов. Вариант 3

Напишите программу, которая перебирает целые числа, большие \(3~000~000,\) в порядке возрастания и ищет среди них числа, представимые в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи либо цифру \(1,\) либо цифру \(3.\) В ответе в первом столбце таблицы запишите первые \(5\) найденных чисел в порядке возрастания, а во втором столбце — для каждого числа наибольший из соответствующих им найденных множителей. Количество строк в таблице избыточно.

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

q, n = 0, 3_000_000

while q < 5:
    n += 1
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            if is_prime(x) and any(z in str(x) for z in '13'):
                m = n // x
                if is_prime(m) and any(z in str(m) for z in '13'):
                    q += 1
                    print(n, m)
            break

Ответ:
\(3000001 \,\, 3517\)
\(3000009 \,\, 1000003\)
\(3000013 \,\, 3881\)
\(3000023 \,\, 230771\)
\(3000031 \,\, 22901\)

ЕГЭ 2026. Крылов. Вариант 2

Напишите программу, которая перебирает все целые шестизначные числа в порядке возрастания и ищет среди них те, которые не содержат в своей записи цифру \(0\) и которые можно представить в виде суммы нечётного натурального числа, делящегося без остатка на \(113,\) и натуральной степени числа \(3.\) В ответе в первом столбце таблицы запишите первые \(5\) найденных чисел в порядке возрастания, а во втором столбце — для каждого числа соответствующий показатель степени числа \(3.\)

Количество строк в таблице для ответа избыточно.

Решение:

Python


p3 = [3**n for n in range(13)]
q, n = 0, 99999

while q < 5:
    n += 1
    if '0' not in str(n):
        for p in range(1, 13):
            x = n - p3[p]
            if x > 0 and x % 2 == 1 and x % 113 == 0:
                print(n, p)
                q += 1
                break

Ответ:
\(111142 \,\, 10\)
\(111232 \,\, 7\)
\(111312 \,\, 8\)
\(111314 \,\, 2\)
\(111322 \,\, 5\)

ЕГЭ 2026. Крылов. Вариант 1

Напишите программу, которая перебирает все целые шестизначные числа в порядке возрастания и ищет среди них те, которые не содержат в своей записи цифру \(1\) и которые можно представить в виде суммы нечётного натурального числа, делящегося без остатка на \(103,\) и натуральной степени числа \(3.\) В ответе в первом столбце таблицы запишите первые \(5\) найденных чисел в порядке возрастания, а во втором столбце — для каждого числа соответствующий показатель степени числа \(3.\)

Количество строк в таблице для ответа избыточно.

Решение:

Python


p3 = [3**n for n in range(13)]
q, n = 0, 199999

while q < 5:
    n += 1
    if '1' not in str(n):
        for p in range(1, 13):
            x = n - p3[p]
            if x > 0 and x % 2 == 1 and x % 103 == 0:
                print(n, p)
                q += 1
                break

Ответ:
\(200004 \,\, 4\)
\(200034 \,\, 6\)
\(200036 \,\, 9\)
\(200050 \,\, 7\)
\(200056 \,\, 10\)

ЕГЭ 2026. Статград. 23.10.2025

Пусть \(S\) – сумма всех простых натуральных делителей целого числа, не считая самого числа. Если таких делителей у числа нет, то считаем значение \(S\) равным нулю.

Напишите программу, которая перебирает целые числа, меньшие \(1~325~000,\) в порядке убывания и ищет среди них такие, для которых значение \(S\) не равно нулю, не больше \(30~000\) и кратно \(5.\) В ответе запишите первые пять найденных чисел в порядке убывания.

Например, для числа \(10\) \(S = 2 + 5 = 7.\)

Решение:

Python


import math


def is_prime(n):
    if n < 2:
        return False
    if n == 2:
        return True
    if n & 1 == 0:
        return False
    for i in range(3, int(math.sqrt(n)) + 1, 2):
        if n % i == 0:
            return False
    return True

def S(n):
    s = set()
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            d = n // i
            if is_prime(i):
                s.add(i)
            if is_prime(d):
                s.add(d)
    if s:
        return sum(s)
    return 0

q = 5
n = 1_325_000
while q:
    n -= 1
    s = S(n)
    if s and s <= 30_000 and s % 5 == 0:
        print(n)
        q -= 1

Ответ:
\(1324994\)
\(1324992\)
\(1324991\)
\(1324986\)
\(1324980\)

ЕГЭ. Основная волна. Пересдача. 03.07.2025

Напишите программу, которая перебирает целые числа, большие \(6~086~055,\) в порядке возрастания и ищет среди них числа, представленные в виде произведено двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи ровно одну цифру \(6.\)

В ответе в первом столбце таблицы запишите первые \(5\) найденных чисел в порядке возрастания, а во втором столбце — для каждого из них соответствующий наибольший из найденных множителей.

Количество строк в таблице для ответа избыточно.

Решение:

Python


def sieve(n):
    tmp = [1] * n
    tmp[0] = tmp[1] = 0
    for x in range(2, int(n**0.5) + 1):
        if tmp[x]:
            for p in range(x**2, n, x):
                tmp[p] = 0
    ans = []
    for p in range(2, n):
        if tmp[p]:
            ans.append(p)
    return ans

primes = sieve(6_500_000)

def divisors(n):
    div = []
    p = 0
    while n > 1:
        while n % primes[p] == 0:
            div.append(primes[p])
            n //= primes[p]
        p += 1
    return div

q = 0
n = 6_086_055
while q < 5:
    n += 1
    div = divisors(n)
    if len(div) == 2 and all(str(x).count('6') == 1 for x in div):
        print(n, max(div))
        q += 1

Ответ:
\(6086089 \,\, 2467\)
\(6086161 \,\, 3673\)
\(6087281 \,\, 9467\)
\(6087317 \,\, 36451\)
\(6087727 \,\, 2683\)

ЕГЭ. Основная волна. Резерв. 23.06.2025

Напишите программу, которая перебирает целые числа, большие \(15~381~264,\) в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно трёх простых множителей, не обязательно различных, каждый из которых содержит в своей записи ровно одну цифру \(1.\)

В ответе в первом столбце таблицы запишите первые \(5\) найденных чисел в порядке возрастания, а во втором столбце — для каждого из чисел соответствующий им наибольший из найденных множителей.

Количество строк в таблице для ответа избыточно.

Решение:

Python


def sieve(n):
    tmp = [1] * n
    tmp[0] = tmp[1] = 0
    for x in range(2, int(n**0.5) + 1):
        if tmp[x]:
            for p in range(x**2, n, x):
                tmp[p] = 0
    ans = []
    for p in range(2, n):
        if tmp[p]:
            ans.append(p)
    return ans

primes = sieve(16_000_000)

def divisors(n):
    div = []
    p = 0
    while n > 1:
        while n % primes[p] == 0:
            div.append(primes[p])
            n //= primes[p]
        p += 1
    return div

q = 0
n = 15_381_264
while q < 5:
    n += 1
    div = divisors(n)
    if len(div) == 3 and all(str(x).count('1') == 1 for x in div):
        print(n, max(div))
        q += 1

Ответ:
\(15381301 \,\, 38167\)
\(15381887 \,\, 1283\)
\(15382727 \,\, 16007\)
\(15382991 \,\, 8513\)
\(15383141 \,\, 919\)

ЕГЭ. Основная волна. Резерв. 19.06.2025

Напишите программу, которая перебирает целые числа, большие \(6~651~220,\) в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи ровно одну цифру \(2.\)

В ответе в первом столбце таблицы запишите первые \(5\) найденных чисел в порядке возрастания, а во втором столбце — для каждого из чисел соответствующий им наибольший из найденных множителей.

Количество строк в таблице для ответа избыточно.

Решение:

Python


def is_prime(n):
    if n == 2:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

def two_prime(n):
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d = n // x
            if is_prime(x) and is_prime(d):
                return [x, d]
    return 0

q = 0
n = 6_651_220
while q < 5:
    n += 1
    t = two_prime(n)
    if t and all(str(x).count('2') == 1 for x in t):
        print(n, max(t))
        q += 1

Ответ:
\(6651241 \,\, 2579\)
\(6651262 \,\, 3325631\)
\(6651286 \,\, 3325643\)
\(6651314 \,\, 3325657\)
\(6651347 \,\, 289189\)

ЕГЭ. Основная волна. 11.06.2025-2

Пусть \(M\) — сумма минимального и максимального простых натуральных делителей целого числа, не считая самого числа. Если таких делителей у числа нет, то значение \(M\) считается равным нулю. Напишите программу, которая перебирает целые числа, большие \(5~400~000,\) в порядке возрастания и ищет среди них такие, для которых \(N\) больше \(60~000\) и является палиндромом, т.е. одинаково читается слева направо и справа налево. В ответе запишите в первом столбце таблицы первые пять найденных — чисел в порядке возрастания, а во втором столбце — соответствующие им значения \(M.\)

Например, для числа \(298\) \(M = 2 + 149 = 151.\)

Количество строк в таблице для ответа избыточно.

Решение:

Python


def is_prime(n):
    if n == 2:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

def sum_divisors(n):
    divs = set()
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d = n // x
            if is_prime(x):
                divs.add(x)
            if is_prime(d):
                divs.add(d)
    return min(divs) + max(divs) if divs else 0

#print(sum_divisors(298))

q = 0
n = 5_400_000
while q < 5:
    n += 1
    M = sum_divisors(n)
    if M > 60_000 and str(M) == str(M)[::-1]:
        print(n, M)
        q += 1

Ответ:
\(5400042\,\, 900009\)
\(5400420 \,\, 90009\)
\(5400866 \,\, 158851\)
\(5406116 \,\, 1351531\)
\(5406420 \,\, 90109\)

ЕГЭ. Основная волна. 11.06.2025

Пусть \(M\) — сумма минимального и максимального простых делителей целого числа, не считая самого числа. Если у числа нет простых делителей, кроме него самого, то \(M = 0.\) Определите первые пять, большие, чем \(7~000~000\) у которых оканчиваются на \(13.\) В ответе укажите эти числа.

Решение:

Python


def is_prime(n):
    if n == 2:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

def sum_divs(n):
    divs = set()
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d = n // x
            if is_prime(x):
                divs.add(x)
            if is_prime(d):
                divs.add(d)
    return min(divs) + max(divs) if divs else 0

q = 0
n = 7_000_000
while q < 5:
    n += 1
    M = sum_divs(n)
    if M % 100 == 13:
        print(n)
        q += 1

Ответ: \(7000018\)
\(7000076\)
\(7000088\)
\(7000096\)
\(7000124\)

ЕГЭ. Основная волна. 10.06.2025

Определите первые \(5\) чисел, больших \(2~900~000,\) которые являются произведением двух простых чисел, каждое из которых содержит в себе ровно один \(0.\) В ответе в первом столбце таблицы запишите найденные числа в порядке возрастания, а во втором соответствующие им их максимальные множители.

Решение:

Python


def is_prime(n):
    if n == 2:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

def divisors(n):
    divs = set()
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d = n // x
            if is_prime(x):
                divs.add(x)
            if is_prime(d):
                divs.add(d)
    return divs

q = 0
n = 2_900_000

while q < 5:
    n += 1
    divs = divisors(n)
    if len(divs) == 2 and all(str(x).count('0') == 1 for x in divs):
        print(n, max(divs))
        q += 1

Ответ:
\(2900021 \,\, 27103\)
\(2900449 \,\, 27107\)
\(2900519 \,\, 4091\)
\(2900663 \,\, 27109\)
\(2901809 \,\, 5701\)

ЕГЭ. Апробация. 14.05.2025-1

Напишите программу, которая перебирает целые числа, большие \(800~000,\) в порядке возрастания и ищет среди них такие, у которых есть натуральный делитель, оканчивающийся на цифру \(7\) и не равный ни самому числу, ни числу \(7.\) В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце — пять соответствующих этим числам минимальных делителей, оканчивающихся на цифру \(7,\) не равных ни самому числу, ни числу \(7.\)

Количество строк в таблице для ответа избыточно.

Решение:

Python


def div7(n):
    divisors = set()
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            if x != 7 and x % 10 == 7:
                divisors.add(x)
            d = n // x
            if d % 10 == 7:
                divisors.add(d)

    return min(divisors) if divisors else 0

q = 0
n = 800_000
while q < 5:
    n += 1
    d = div7(n)
    if d:
        print(n, d)
        q += 1

Ответ:
\(800001 \,\, 927\)
\(800003 \,\, 17\)
\(800004 \,\, 1227\)
\(800006 \,\, 1487\)
\(800007 \,\, 2847\)

ЕГЭ. ЕГКР. 19.04.2025

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

символ «?» означает ровно одну произвольную цифру;
символ «*» означает любую последовательность произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске \(123{*}4?5\) соответствуют числа \(123405\) и \(12300405.\)

Среди натуральных чисел, не превышающих \(10^{10},\) найдите все числа, соответствующие маске \(4{*}4736{*}1,\) которые делятся на \(7993\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им результаты деления этих чисел на \(7993.\) Количество строк в таблице для ответа избыточно.

Решение:

Python


from fnmatch import fnmatch

n = 447361 + (7993 - 447361 % 7993) % 7993
for x in range(n, 10**10, 7993):
    if fnmatch(str(x),'4*4736*1'):
        print(x, x // 7993)

Ответ:
\(44736821 \,\, 5597\)
\(4064736241 \,\, 508537\)
\(4303247361 \,\, 538377\)
\(4347368721 \,\, 543897\)
\(4447361151 \,\, 556407\)
\(4473658121 \,\, 559697\)
\(4794736931 \,\, 599867\)

ЕГЭ. Досрочный экзамен. 08.04.2025

Напишите программу, которая перебирает целые числа, бóльшие \(1~125~000,\) в порядке возрастания и ищет среди них такие, у которых есть натуральный делитель, оканчивающийся на цифру \(7\) и не равный ни самому числу, ни числу \(7.\) В ответе запишите в первой строке таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – наименьший делитель для каждого из них, оканчивающийся цифрой \(7,\) не равный ни самому числу, ни числу \(7.\) Количество строк в таблице для ответа избыточно.

Решение:

Python


def divisors(n):
    div7 = set()
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d = n // x
            if x != 7 and x % 10 == 7:
                div7.add(x)
            if d != 7 and d % 10 == 7:
                div7.add(d)
    if len(div7):
        return min(div7)
    return 0

i = 0
n = 1_125_000
while i < 5:
    n += 1
    d = divisors(n)
    if d:
        print(n, d)
        i += 1

Ответ:
\(1125003 \,\, 467\)
\(1125006 \,\, 97\)
\(1125009 \,\, 17\)
\(1125011 \,\, 3187\)
\(1125012 \,\, 177\)

ЕГЭ. Апробация. 05.03.2025

Пусть \(M\) — сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю. Напишите программу, которая перебирает целые числа, большие \(700~000,\) в порядке возрастания и ищет среди них такие, для которых \(M\) оканчивается на \(4.\) В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце — соответствующие им значения \(M.\) Например, для числа \(20\) \(M = 2 + 10 = 12.\) Количество строк в таблице для ответа избыточно.

Решение:

Python


from itertools import count

def sum_divisors(n):
    d = set()
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d.add(x)
            d.add(n // x)
    return min(d) + max(d) if d else 0

q = 0
for n in count(700_000):
    sd = sum_divisors(n)
    if sd % 10 == 4:
        print(n, sd)
        q += 1
    if q == 5:
        break

Ответ:
\(700004 \,\, 350004\)
\(700009 \,\, 41194\)
\(700023 \,\, 233344\)
\(700024 \,\, 350014\)
\(700044 \,\, 350024\)

ЕГЭ. Демо-2025

Пусть \(M\) – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю.

Напишите программу, которая перебирает целые числа, бо́льшие \(800~000\), в порядке возрастания и ищет среди них такие, для которых \(M\) оканчивается на \(4\). В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – соответствующие им значения \(M\).

Например, для числа \(20\) \(М = 2 + 10 = 12\).

Количество строк в таблице для ответа избыточно.

Решение:

C++


#include<iostream>
#include<cmath>

using namespace std;

int min_divisor(int n) {
    int ans = 0, t = sqrt(n);

    for (int x = 2; x < t + 1; x++)
        if (n % x == 0) {
            ans = x;
            break;
        }
    return ans;
}

int32_t main() {
    int q = 5, n = 800 * 1000;
    

    while(q) {
        int d;
        n++;
        d = min_divisor(n);
        if(d && (d + n / d) % 10 == 4) {
           cout << n << " " << d + n / d << '\n';
           q--;
        }
    }
}

Ответ:
\(800004 \,\, 400004\)
\(800009 \,\, 114294\)
\(800013 \,\, 266674\)
\(800024 \,\, 400014\)
\(800033 \,\, 61554\)

ЕГЭ. Шастин. 7.6.2025

(Л. Шастин) Напишите программу, которая перебирает целые числа, меньшие \(987~654,\) в порядке убывания и ищет среди них такие, у которых есть простой делитель, оканчивающийся на \(17\) и не равный ни самому числу, ни числу \(17.\) В ответе запишите в первой строке таблицы первые пять найденных чисел в порядке убывания, а во втором столбце — наименьший простой делитель для каждого из них, оканчивающийся на \(17,\) не равный ни самому числу, ни числу \(17.\)

Количество строк в таблице для ответа избыточно.

Решение:

Python


def is_prime(n):
    if n == 2:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

def prime_div(n):
    div = set()
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d = n // x
            if is_prime(x):
                div.add(x)
            if is_prime(d):
                div.add(d)
    return div

n = 987_654
q = 0
while q < 5:
    n -= 1
    div = [x for x in prime_div(n) if x != 17 and x % 100 == 17]
    if div:
        print(n, min(div))
        q += 1

Ответ:
\(987634 \,\, 493817\)
\(987619 \,\, 3217\)
\(987510 \,\, 32917\)
\(987485 \,\, 4817\)
\(987472 \,\, 61717\)

ЕГЭ. Шастин. 5.6.2025

(Л. Шастин) Обозначим через \(F\) целую часть среднего арифметического всех нечётных делителей целого числа. Напишите программу, которая перебирает целые числа, большие \(345~678,\) в порядке возрастания и ищет среди них такие, для которых значение \(F\) не равно нулю и кратно \(37.\)

Выведите первые \(5\) найденных числа в порядке возрастания и справа от каждого числа - соответствующее значение \(F.\)

Количество строк для записи ответа избыточно.

Решение:

Python


def div_mean(n):
    div = set()
    for x in range(1, int(n**0.5) + 1):
        if n % x == 0:
            if x % 2 == 1:
                div.add(x)
            d = n // x
            if d % 2 == 1:
                div.add(d)
    return sum(div) // len(div)

q = 0
n = 345_678
while q < 5:
    n += 1
    F = div_mean(n)
    if F and F % 37 == 0:
        print(n, F)
        q += 1

Ответ:
\(345727 \,\, 172864\)
\(345728 \,\, 703\)
\(345794 \,\, 44289\)
\(345801 \,\, 58460\)
\(345819 \,\, 60680\)

ЕГЭ. Шастин. 3.6.2025

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

символ «\(?\)» означает ровно одну произвольную цифру;
символ «\({*}\)» означает любую последовательность произвольной длины; в том числе «\({*}\)» может задавать и пустую последовательность.
Например, маске \(123{*}4?5\) соответствуют числа \(123475\) и \(12300475.\)

Среди натуральных чисел, не превышающих \(10^{12},\) найдите все числа, которые соответствуют маске \(5{*}7?,\) делятся на \(84318\) без остатка и не содержат одинаковых цифр.

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

Решение:

Содержать разные цифры могут числа, чья разрядность не превышает \(10.\)

Python


from fnmatch import fnmatch

for x in range(84318, 10**11, 84318):
    sx = str(x)
    if fnmatch(sx, '5*7?') and len(set(sx)) == len(sx):
        print(x, x // 84318)

Ответ:
\(52361478 \,\, 621\)
\(532468170 \,\, 6315\)
\(581203974 \,\, 6893\)
\(5184039276 \,\, 61482\)
\(5642138970 \,\, 66915\)
\(5892310476 \,\, 69882\)

ЕГЭ. Шастин. 1.6.2025

(Л. Шастин) Обозначим через \(M\) сумму двух минимальных и двух максимальных простых делителей целого числа, не считая самого числа. Если количество простых делителей у числа меньше \(4,\) то считаем значение \(M\) равным нулю. Напишите программу, которая перебирает целые числа, большие \(456~789,\) в порядке возрастания и ищет среди них такие, для которых значение \(M\) при делении на \(114\) даёт в остатке \(39.\)

Выведите первые \(5\) найденных чисел в порядке возрастания, справа от каждого числа запишите соответствующее значения \(M.\)

Количество строк для записи ответа избыточно.

Решение:

Python


def is_prime(n):
    if n == 2:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

def sum_div(n):
    prime_divisors = set()
    for x in range(2, int(n ** 0.5) + 1):
        if n % x == 0:
            d = n // x
            if is_prime(x):
                prime_divisors.add(x)
            if is_prime(d):
                prime_divisors.add(d)
    if len(prime_divisors) < 4:
        return 0
    p = sorted(list(prime_divisors))
    return p[0] + p[1] + p[-2] + p[-1]

n = 456_789
q = 0
while q < 5:
    n += 1
    M = sum_div(n)
    if M % 114 == 39:
        print(n, M)
        q += 1

Ответ:
\(457366 \,\, 381\)
\(457512 \,\, 1749\)
\(457638 \,\, 951\)
\(457722 \,\, 495\)
\(457786 \,\, 1749\)

ЕГЭ Статград. Профиль. 12.05.2025

Маска числа – это последовательность цифр, в которой могут встречаться специальные символы «\(?\)» и «\(*\)». Символ «\(?\)» означает ровно одну произвольную цифру, символ «\(*\)» означает произвольную (в том числе пустую) последовательность цифр. Например, маске \(123{*}4{?}5\) соответствуют числа \(123405\) и \(12376415.\)

Найдите все натуральные числа, не превышающие \(2 \cdot 10^9,\) которые соответствуют маске \(1{*}7{*}1\) и при этом имеют ровно три нетривиальных делителя (не считая \(1\) и самого числа). В ответе запишите все найденные числа в порядке возрастания.

Решение:

Python


from fnmatch import fnmatch

def is_prime(n):
    if n == 2:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

for n in range(2, int((2 * 10**9)**0.25) + 1):
    if is_prime(n) and fnmatch(str(n**4), '1*7*1'):
        print(n**4)

Ответ:
\(1874161\)
\(12117361\)
\(131079601\)
\(163047361\)
\(1073283121\)
\(1387488001\)

ЕГЭ Статград. База. 12.05.2025

Пусть \(R\) – сумма различных непростых натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(R\) равным нулю. Напишите программу, которая перебирает целые числа, меньшие \(987~653,\) в порядке убывания и ищет среди них такие, для которых \(R\) оканчивается на цифру \(7.\) В ответе запишите первые пять найденных чисел в порядке убывания.

Например, для числа \(12{:}\) \(R = 4 + 6 = 10.\)

Решение:

Python


def is_prime(n):
    if n == 2:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

def sum_div(n):
    divisors = set()
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            if not is_prime(x):
                divisors.add(x)
            d = n // x
            if not is_prime(d):
                divisors.add(d)
    return sum(divisors) if divisors else 0

#print(sum_div(12))
q = 0
n = 987_653
while q < 5:
    n -= 1
    if sum_div(n) % 10 == 7:
        print(n)
        q += 1

Ответ:
\(987644\)
\(987638\)
\(987637\)
\(987635\)
\(987633\)

ЕГЭ. Демо-2025-2

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

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

Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300405\). Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, соответствующие маске \(3?12?14*5\), делящиеся на \(1917\) без остатка.

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

Количество строк в таблице для ответа избыточно.

Решение:

C++


#include<iostream>
#include<string>
#include<fnmatch.h>

using namespace std;

int32_t main() {
    long long n = 30120145;
    n += n % 1917 ? 1917 - n % 1917 : 0;

    for(; n < 10ll * 1000 * 1000 * 1000; n += 1917)
        if (!fnmatch("3?12?14*5", to_string(n).c_str(), 0))
            cout << n << " " << n / 1917 << '\n';

}

Ответ:
\(351261495 \,\, 183235\)
\(3212614035 \,\, 1675855\)
\(3412614645 \,\, 1780185\)
\(3712414275 \,\, 1936575\)
\(3912414885 \,\, 2040905\)

ЕГЭ. Шастин. 7.05.2025

(Л. Шастин) Обозначим через \(F\) целую часть среднего арифметического всех простых делителей целого числа, оканчивающихся на \(7,\) не считая самого числа. Если таких делителей у числа нет, то считаем значение \(F\) равным нулю. Напишите программу, которая перебирает целые числа, меньшие \(750~000,\) в порядке убывания, и ищет среди них такие, для которых значение \(F\) не равно нулю и кратно \(111.\)

Выведите первые \(5\) найденных числа в порядке убывания и справа от каждого числа — соответствующие им значения \(F.\)

Например, для числа \(119\) значение \(F = (7 + 17)/2 = 12.\) Количество строк для записи ответа избыточно.

Решение:

Python


def is_prime(n):
    if n == 2:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

def F(n):
    div = set()
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            if x % 10 == 7 and is_prime(x):
                div.add(x)
            d = n // x
            if d % 10 == 7 and is_prime(d):
                div.add(d)
    return sum(div) // len(div) if div else 0


#print(F(119))
q = 0
n = 750_000
while q < 5:
    n -= 1
    avg = F(n)
    if avg and avg % 111 == 0:
        print(n, avg)
        q += 1

Ответ: \(749039 \,\, 7992\)
\(748679 \,\, 3552\)
\(748663 \,\, 333\)
\(746360 \,\, 222\)
\(745109 \,\, 2997\)

ЕГЭ. Шастин. 13.03.2025

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

символ «?» означает ровно одну произвольную цифру;
символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске \(123{*}4{?}5\) соответствуют числа \(123405\) и \(12300405.\)

Среди натуральных чисел, не превышающих \(10^9,\) найдите все числа, соответствующие маске \(34{*}56{?}7,\) делящиеся на \(4321\) без остатка, произведение цифр которых оканчивается на \(0.\) В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им произведения их цифр. Количество строк в таблице для ответа избыточно.

Решение:

Так как в маске \(34{*}56{?}7\) присутствуют цифры \(5\) и \(6,\) то произведение цифр любого числа, удовлетворяющего этой маске, будет оканчиваться на \(0.\)

Python


from fnmatch import fnmatch

start = 345607 + (4321 - 345607 % 4321) % 4321

for n in range(start, 10**9, 4321):
    ns = str(n)
    if fnmatch(ns, '34*56?7'):
        prod = 1
        for ch in ns:
            prod *= int(ch)
        print(n, prod)

Ответ:
\(341475667 \,\, 423360\)
\(344975677 \,\, 4445280\)
\(348475687 \,\, 4515840\)

ЕГЭ. ЕГКР. 21.12.2024

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

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

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

Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, соответствующие маске \(54{?}1{?}3{*}7\), делящиеся на \(18579\) без остатка.

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

Количество строк в таблице для ответа избыточно.

Решение:

Python


from fnmatch import fnmatch
n = 5401037
n += 18579 - n % 18579

for x in range(n, 10**10, 18579):
    if fnmatch(str(x), '54?1?3*7'):
        print(x, x // 18579)

Ответ:
\(545163597 \,\, 29343\)
\(5411932647 \,\, 291293\)
\(5421036357 \,\, 291783\)
\(5451134337 \,\, 293403\)
\(5461538577 \,\, 293963\)
\(5481232317 \,\, 295023\)
\(5491636557 \,\, 295583\)

ЕГЭ. Статград. 01.04.2025-1

Пусть \(M\) — максимальный простой натуральный делитель целого числа, не считая самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю. Напишите программу, которая перебирает целые числа, большие \(1~750~000,\) в порядке возрастания и ищет среди них такие, для которых \(M\) не больше \(15~000\) и оканчивается на \(7.\) В ответе запишите первые пять найденных чисел в порядке возрастания.

Например, для числа \(105\) \(M = 7.\)

Решение:

Python


def is_prime(n):
    if n == 2:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

def max_div(n):
    divs = {0}
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            if is_prime(x):
                divs.add(x)
            t = n // x
            if is_prime(t):
                divs.add(t)
    return max(divs)

i = 0
n = 1_750_000
while i < 5:
    n += 1
    md = max_div(n)
    if md <= 15_000 and md % 10 == 7:
        print(n)
        i += 1

Ответ:
\(1750001\)
\(1750006\)
\(1750023\)
\(1750041\)
\(1750044\)

ЕГЭ. Статград. 04.03.2025

Маска числа – это последовательность цифр, в которой могут встречаться специальные символы «\(?\)» и «\(*\)». Символ «\(?\)» означает ровно одну произвольную цифру, символ «\(*\)» означает произвольную (в том числе пустую) последовательность цифр. Например, маске \(123{*}4{?}5\) соответствуют числа \(123405\) и \(12376415.\)

Найдите все натуральные числа, не превышающие \(10^9,\) которые соответствуют маске \(4{?}28{*}8{*}3\) и при этом без остатка делятся на \(9111.\) В ответе запишите все найденные числа в порядке возрастания.

Решение:

Python


from fnmatch import fnmatch

n = 402883
r = n % 9111
n += 9111 - r if r else 0

for x in range(n, 10**9, 9111):
    if fnmatch(str(x), '4?28*8*3'):
        print(x)

Ответ:
\(482883\)
\(422868843\)
\(472888233\)

ЕГЭ. Статград. 28.01.2025-1

Маска числа – это последовательность цифр, в которой могут встречаться специальные символы «\(?\)» и «\(*\)». Символ «\(?\)» означает ровно одну произвольную цифру, символ «\(*\)» означает произвольную (в том числе пустую) последовательность цифр. Например, маске \(123{*}4?5\) соответствуют числа \(123405\) и \(12376415.\)

Найдите все натуральные числа, не превышающие \(10^9,\) которые соответствуют маске \(4{?}5{*}07{*}3\) и при этом без остатка делятся на \(9341.\) В ответе запишите все найденные числа в порядке возрастания.

Решение:

Python


from fnmatch import fnmatch

n = 405073 + (9341 - 405073 % 9341)
for x in range(n, 10**9, 9341):
    if fnmatch(str(x), '4?5*07*3'):
        print(x)

Ответ:
\(495073\)
\(48507813\)
\(405707653\)
\(495007613\)
\(495568073\)

ЕГЭ. Статград. 17.12.2024-1

Маска числа – это последовательность цифр, в которой могут встречаться специальные символы «\(?\)» и «\(*\)». Символ «\(?\)» означает ровно одну произвольную цифру, символ «\(*\)» означает произвольную (в том числе пустую) последовательность цифр.

Например, маске \(123{*}4{?}5\) соответствуют числа \(123405\) и \(12376415.\)

Найдите все натуральные числа, принадлежащие интервалу \([10^8; \, 2 \cdot 10^8],\) которые соответствуют маске \({?}{*}42{*}81\) и имеют ровно три натуральных делителя. В ответе запишите все найденные числа в порядке возрастания.

Решение:

Python


from fnmatch import fnmatch

def is_prime(n):
    if n == 2:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

for x in range(10**4, int(2**0.5 * 10**4) + 1):
    if is_prime(x):
        q = x**2
        if fnmatch(str(q), '?*42*81'):
            print(q)

Ответ:
\(114297481\)
\(141824281\)
\(142587481\)
\(149842081\)

ЕГЭ. Статград. 24.10.2024-1

Пусть \(M (N)\) – сумма \(2\) наибольших различных натуральных делителей натурального числа \(N\), не считая самого числа и единицы. Если у числа \(N\) меньше \(2\) таких делителей, то \(M (N)\) считается равным \(0.\)

Найдите все такие числа \(N\), что \(110~250~000 \leqslant N \leqslant 110~300~000\), а десятичная запись числа \(M (N)\) заканчивается на \(1002.\)

В ответе перечислите все найденные числа \(N\) в порядке возрастания.

Решение:

Python


def M(n):
    s = set()
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            s.add(i)
            s.add(n // i)

    tmp = sorted(list(s))
    if len(tmp) < 2:
        return 0
    return tmp[-1] + tmp[-2]

for N in range(110_250_000, 110_300_001):
    if M(N) % 10000 == 1002:
        print(N)

Ответ:
\(110254175\)
\(110271687\)
\(110275397\)
\(110281336\)

ЕГЭ. Шастин. 9.2.2025

(Д. Бахтиев) Пусть \(R\) — разность максимального и минимального простых делителей целого числа, не считая самого числа. Напишите программу, которая перебирает целые числа, большие \(3~333~337\) в порядке возрастания и ищет среди них такие, для которых \(R\) больше \(1000\) и кратно \(3.\) В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце — соответствующие им значения \(R.\)

Решение:

Python


def is_prime(n):
    if n == 2:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

def find_r(n):
    divisors = set()
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            if is_prime(x):
                divisors.add(x)
            tmp = n // x
            if is_prime(tmp):
                divisors.add(tmp)
    if divisors:
        return max(divisors) - min(divisors)
    else:
        return -1

i = 0
n = 3_333_337
while i < 5:
    n += 1
    R = find_r(n)
    if R > 1000 and R % 3 == 0:
        print(n, R)
        i += 1

Ответ:
\(3333338 \,\, 9309\)
\(3333340 \,\, 166665\)
\(3333342 \,\, 555555\)
\(3333349 \,\, 2748\)
\(3333354 \,\, 1287\)

ЕГЭ. Шастин. 19.01.2025

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

символ «\(?\)» означает ровно одну произвольную цифру;
символ «\(*\)» означает любую последовательность цифр произвольной длины; в том числе «\(*\)» может задавать и пустую последовательность;
символ «Н» означает ровно одну нечётную цифру;
символ «Ч» означает ровно одну чётную цифру:
Например, маске 1Ч3*4?Н соответствуют числа \(123405\) и \(12300405.\)

Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, соответствующие маске Ч9?23?*23НЧ и делящиеся на \(1984\) без остатка.

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

Решение:

Python


from fnmatch import fnmatch

n = 2902302310 + (1984 - 2902302310 % 1984)
for x in range(n, 10**10, 1984):
    xs = str(x)
    if int(xs[0]) % 2 == 0 and int(xs[-2]) % 2 and int(xs[-1]) % 2 == 0 \
       and fnmatch(xs[1:-2], '9?23?*23'):
        print(x, x // 1984)

Ответ:
\(2902302336 \,\, 1462854\)
\(4912342336 \,\, 2475979\)
\(6922382336 \,\, 3489104\)
\(6932302336 \,\, 3494104\)
\(8912332352 \,\, 4492103\)
\(8942342336 \,\, 4507229\)

ЕГЭ. Шастин. 18.12.2024

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

символ «\(?\)» означает ровно одну произвольную цифру;
символ «\(*\)» означает любую последовательность цифр произвольной длины; в том числе «\(*\)» может задавать и пустую последовательность.
Например, маске \(123{*}4{?}5\) соответствуют числа \(123405\) и \(12300405.\)

Напишите программу, которая перебирает целые числа, большие \(500~000,\) в порядке возрастания и ищет среди них такие, у которых есть хотя бы один делитель, соответствующий маске \(2{*}3{?}.\) В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце - наименьший их делитель, соответствующий заданной маске.

Количество строк в таблице для ответа избыточно.

Решение:

Python


from fnmatch import fnmatch

def divisors(n):
    d = set()
    d.add(1)
    d.add(n)
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d.add(x)
            d.add(n // x)
    return d

q = 0
n = 500_000
while q < 5:
    n += 1
    d = [x for x in divisors(n) if fnmatch(str(x), '2*3?')]
    if len(d):
        print(n, min(d))
        q += 1

Ответ:
\(500016 \,\, 20834\)
\(500018 \,\, 233\)
\(500020 \,\, 230\)
\(500038 \,\, 238\)
\(500040 \,\, 20835\)

ЕГЭ. Шастин. 30.11.2024

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


символ «?» означает ровно одну произвольную цифру;
символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске \(123{*}4?5\) соответствуют числа \(123405\) и \(12300405\).

Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, делящиеся на \(2025\) без остатка и соответствующие обеим маскам: \(33?2{*}42?\) и \({*}32??2?.\)

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

Количество строк в таблице для ответа избыточно.

Решение:

Python


from fnmatch import fnmatch

a = []
n1 = 3302420 - (3302420 % 2025) + 2025

for x in range(n1, 10**10, 2025):
    if fnmatch(str(x), '33?2*42?'):
        a.append(x)

n2 = 320020 - (320020 % 2025) + 2025
for x in range(n2, 10**10, 2025):
    if x in a and fnmatch(str(x), '*32??2?'):
        print(x, x // 2025)

Ответ:
\(33325425 \,\, 16457\)
\(3302323425 \,\, 1630777\)

ЕГЭ. Шастин. 6.11.2024

(Л. Шастин) Обозначим через \(A\) целую часть среднего арифметического всех делителей фелого числа, не считая самого числа. Напишите программу, которая перебирает целые числа, меньшие \(770000\), в порядке убывания и ищет среди них такие, для которых значение \(A\) оканчивается на \(12\). Выведите первые \(5\) найденных чисел и соответствующие им значения \(A\).

Формат вывода: для каждого из \(5\) таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(A\). Строки выводятся в порядке убывания найденных чисел.

Например, для числа \(8\) значение \(A = (1 + 2 + 4) / 3 = 2\).

Количество строк в таблице для ответа избыточно.

Решение:

Python


def mdiv(n):
    divisors = set()
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n // i)
    divisors.add(1)
    return sum(divisors) // len(divisors)

n = 770000
q = 0
while q < 5:
    n -= 1
    A = mdiv(n)
    if A % 100 == 12:
        print(n, A)
        q += 1

Ответ:
\(769995 \,\, 25612\)
\(769923 \,\, 18312\)
\(769916 \,\, 35712\)
\(769700 \,\, 27112\)
\(769583 \,\, 2912\)

ЕГЭ. Шастин. 18.10.2024

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

– символ «\(?\)» означает ровно одну произвольную цифру;
– символ «\(\#\)» означает любую последовательность чётных цифр произвольной длины; в том числе «\(\#\)» может задавать и пустую последовательность.

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

Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, соответствующие маске \(1592\#6?8\) и делящиеся на \(1996\) без остатка.

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

Количество строк в таблице для ответа избыточно.

Решение:

Python


n = 1592608 + 1996 - (1592608 % 1996)
while n < 10**10:
    ns = str(n)
    sharp = ns[4:-3]
    if ns[:4] == '1592' and (sharp == '' or all(int(x) % 2 == 0 for x in sharp)) \
       and ns[-3] == '6'and ns[-1] == '8':
        print(n, n // 1996)
    n += 1996

Ответ:
\(1592464688 \,\, 797828\)
\(1592484648 \,\, 797838\)

ЕГЭ. Шастин. 4.10.2024

(Д. Бахтиев) Напишите программу, которая перебирает целые числа, большие \(1~000~000\), в порядке возрастания и ищет среди них те, которые имеют ровно \(3\) простых делителя. В ответе запишите \(5\) наименьших таких чисел в порядке возрастания. Справа от каждого такого числа укажите его наибольший простой делитель.

Количество строк в таблице для ответа избыточно.

Решение:

Python


def is_prime(n):
    if n == 2 or n == 3:
        return True
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return False
    return True

def prime_divisors(n):
    divisors = set()
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            divisors.add(x)
            divisors.add(n // x)
    return [p for p in divisors if is_prime(p)]

i = 0
x = 1_000_000
while i < 5:
    x += 1
    d = prime_divisors(x)
    if len(d) == 3:
        print(x, max(d))
        i += 1

Ответ:
\(1000002\)    \(166667\)
\(1000004\)    \(89\)
\(1000006\)    \(71429\)
\(1000012\)    \(19231\)
\(1000013\)    \(383\)

ЕГЭ. Шастин. 19.09.2024

(Л. Шастин) Пусть \(S\) — сумма всех делителей целого числа. Например, для числа \(12\) значение \(S = 1 + 2 + 3 + 4 + 6 + 12 = 28\). Напишите программу, которая перебирает все четырёхзначные числа и ищет среди них такие, для которых \(S\) оканчивается на \(23\). В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им значения \(S\).

Количество строк в таблице для ответа избыточно.

Решение:

Python


def sum_divisors(n):
    divisors = set()
    for i in range(1, int(n**0.5) + 1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n // i)
    return sum(divisors)

for n in range(1000, 10_000):
    s = sum_divisors(n)
    if s % 100 == 23:
        print(n, s)

Ответ:
\(1681 \,\, 1723\)
\(1936 \,\, 4123\)
\(2592 \,\, 7623\)
\(3025 \,\, 4123\)
\(6962 \,\, 10623\)
\(7569 \,\, 11323\)

ЕГЭ. Шастин. 29.08.2024

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

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

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

Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, соответствующие маске \(21?3*145?5\) и делящиеся на \(2025\) без остатка.

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

Количество строк в таблице для ответа избыточно.

Решение:

C++


#include<iostream>
#include<string>
#include<fnmatch.h>

using namespace std;

int32_t main() {
    long long n = 210314505;
    int r = n % 2025;
    n += r ? 2025 - r : 0; 

    for(; n < 10ll * 1000 * 1000 * 1000; n += 2025) 
        if (!fnmatch("21?3*145?5", to_string(n).c_str(), 0))
            cout << n << " " << n / 2025 << " " << '\n';
}

Ответ:
\(2123214525 \,\, 1048501\)
\(2163714525 \,\, 1068501\)
\(2173114575 \,\, 1073143\)

ЕГЭ. Поляков-6836

(А. Богданов) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины, в том числе «*» может задавать и пустую последовательность.
Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300425\).
Среди десятиразрядных чисел, кратных \(2023\) и соответствующих маске «\(1*1\)», найдите числа с максимальной суммой цифр. В ответ запишите найденные числа в порядке убывания, справа от каждого числа запишите частное от деления на \(2023\).

Решение:

Python


def dig_sum(number):
    s = 0
    while number:
        s += number % 10
        number //= 10
    return s


n = 1999999991 - 1999999991 % 2023        # самое большое десятизначное число 1*, делящееся на 2023

while True:                               # находим самое большое десятизначное 1*1, делящееся на 2023
    if n % 10 == 1:
        break
    n -= 2023

nums = []                                 # сюда соберём все десятизначные числа вида 1*1, делящиеся на 2023

for i in range(n, 999999999, -20230):    # все такие числа находятся друг от друга на расстоянии 20230
    nums.append(i)                        # их не больше 50 000, не так много :)

nums_dig_sum = [dig_sum(n) for n in nums] # считаем суммы цифр каждого такого числа
max_sums = max(nums_dig_sum)              # находим максимальную такую сумму

for i in range(len(nums)):                # печатаем только числа с максимальной суммой, найденной ранее
    if nums_dig_sum[i] == max_sums:
        print(nums[i], nums[i] // 2023)

Ответ:
\(1999769891\) \(988517\)
\(1895989991\) \(937217\)

ЕГЭ. Поляков-2600

Среди целых чисел, принадлежащих числовому отрезку \([268312; \,\, 336492]\), найдите числа, которые представляют собой произведение двух различных простых делителей. Запишите в ответе количество таких чисел и минимальное их них.

Решение:

Python


def sieve(N):
    a = [1]*(N+1)

    a[0] = 0
    a[1] = 0

    for x in range(2, int(N**0.5) + 1):
        if a[x]:
            for i in range(x**2, N+1, x):
                a[i] = 0
                
    primes = []
    for x in range(2, N+1):
        if a[x]:
            primes.append(x)
    
    return primes

primes = sieve(336492)
a = []

for x in range(268312, 336493):
    for i in range(2, int(x**0.5)+1):
        if x % i == 0:
            sec_div = x // i
            if i in primes and i != sec_div and sec_div in primes:
                a.append(x)
            break

print(len(a), min(a))

Ответ: \(14380 \,\, 268313\)

ЕГЭ. Поляков-2599

Среди целых чисел, принадлежащих числовому отрезку \([125697; \,\, 190234]\), найдите числа, которые представляют собой произведение двух различных простых делителей. Запишите в ответе количество таких чисел и максимальное их них.

Решение:

Python


def sieve(N):
    a = [1]*(N+1)

    a[0] = 0
    a[1] = 0

    for x in range(2, int(N**0.5) + 1):
        if a[x]:
            for i in range(x**2, N+1, x):
                a[i] = 0
                
    primes = []
    for x in range(2, N+1):
        if a[x]:
            primes.append(x)
    
    return primes

primes = sieve(190234)
a = []

for x in range(125697, 190235):
    for i in range(2, int(x**0.5)+1):
        if x % i == 0:
            sec_div = x // i
            if i in primes and i != sec_div and sec_div in primes:
                a.append(x)
            break

print(len(a), max(a))

Java


import java.util.ArrayList;

public class EGE2599 {

    static ArrayList<Integer> Sieve(int N) {
        int a[] = new int[N];
        a[0] = 0;
        a[1] = 0;
        for(int i = 0; i < N; i++) {
            a[i] = 1;
        }
        for(int i = 2; i < (int) Math.sqrt(N) + 1; i++) {
            if(a[i] == 1) {
                for(int j = i*i; j < N; j += i) {
                    a[j] = 0;
                }
            }
        }
        ArrayList<Integer> primes = new ArrayList<Integer>();
        for(int i = 2; i < N; i++) {
            if(a[i] == 1) {
                primes.add(i);
            }
        }
        return primes;

    }
    public static void main(String argv[]) {
        ArrayList<Integer> primes = Sieve(190234);
        ArrayList<Integer> a = new ArrayList<Integer>();
        for(int i = 125697; i < 190235; i++) {
            for(int j = 2; j < (int) Math.sqrt(i) + 1; j++) {
                if(i % j == 0) {
                    int sec_div = i / j;
                    if(primes.contains(j) && j != sec_div && primes.contains(sec_div)) {
                        a.add(i);
                    }
                    break;
                }
            }
        }
        int max_el = 125697;
        int sz = a.size();
        for(int i = 0; i < sz; i++) {
            if (a.get(i) > max_el) {
                max_el = a.get(i);
            }
        }
        System.out.println(sz + " " + max_el);
    }
}

Ответ: \(14047 \,\, 190231\)

ЕГЭ. Поляков-2598

Среди целых чисел, принадлежащих числовому отрезку \([1395; \,\, 22717]\), найдите числа, все цифры которых расположены в порядке неубывания. Ответом будет сумма найденных чисел. (К. Амеличев)

Решение:

Python


def num2arr(n):
    return list(map(int, str(n)))


s = 0
for x in range(1395, 22717):
    tmp_arr = num2arr(x)
    if tmp_arr == sorted(tmp_arr):
        s += x

print(s)

Ответ: 10335599

ЕГЭ. Поляков-2597

Среди целых чисел, принадлежащих числовому отрезку \([3159; \,\, 31584]\), найдите числа, которые являются простыми. Ответом будет сумма цифр найденных чисел. (К. Амеличев)

Решение:

Python


def sieve(N):
    a = [1]*(N+1)

    a[0] = 0
    a[1] = 0

    for x in range(2, int(N**0.5) + 1):
        if a[x]:
            for i in range(x**2, N+1, x):
                a[i] = 0
                
    primes = []
    for x in range(2, N+1):
        if a[x]:
            primes.append(x)
    
    return primes


def num2arr(n):
    return list(map(int, str(n)))


arr = sieve(31584)
for i in range(len(arr)):
    if arr[i] >= 3159:
        break

s = 0
for k in range(i, len(arr)):
    s += sum(num2arr(arr[k]))

print(s)

Ответ: 58326

ЕГЭ. Поляков-2596

Среди целых чисел, принадлежащих числовому отрезку \([1686; \,\, 13276]\), найдите числа, все цифры которых нечетные. Ответом будет сумма цифр найденных чисел. (К. Амеличев)

Решение:

Python


def num2arr(n):
    return list(map(int, str(n)))

def prod(a):
    res = 1
    for i in range(len(a)):
        res *= a[i]
    return res

a = []
for x in range(1711, 13200, 2):
    if prod(num2arr(x)) % 2:
        a.append(x)

s = 0
for i in range(len(a)):
    s += sum(num2arr(a[i]))

print(s)

Ответ: 13950

ЕГЭ. Поляков-2595

Среди целых чисел, принадлежащих числовому отрезку \([4099; \,\, 26985]\), найдите числа, имеющие ровно один натуральный делитель, не считая единицы и самого числа. В ответе запишите два числа: сначала количество найденных чисел, а затем сумму цифр этих чисел. (К. Амеличев)

Решение:

Python


def is_prime(n):
    if n == 2 or n == 3:
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

def sum_dig(n):
    return sum(list(map(int, str(n))))

a = []

for x in range(4099, 26986):
    sq = int(x ** 0.5)
    if sq ** 2 == x and is_prime(sq):
        a.append(x)
        
s = 0
for i in range(len(a)):
    s += sum_dig(a[i])

print(len(a), s)

Ответ: \(20 \,\, 377\)

ЕГЭ. Поляков-2594

Среди целых чисел, принадлежащих числовому отрезку \( [2031; \,\, 14312]\), найдите числа, которые не содержат цифру \(2\), если записать их в системе счисления с основанием \(11\). Ответом будет максимум среди найденных чисел. (К. Амеличев)

Решение:

Python


def no2(n):
    while n:
        if n % 11 == 2:
            return False
        else:
            n //= 11
    return True

a = []
for x in range(2031, 14313):
    if no2(x):
        a.append(x)

print(max(a))

Ответ: 14312

ЕГЭ. Поляков-2593

Среди целых чисел, принадлежащих числовому отрезку \( [2945; \,\, 18294]\), найдите числа, не делящиеся на вторую степень какого-либо числа, кроме единицы. Ответом будет сумма цифр найденных чисел. (К. Амеличев)

Решение:

Python


def div2(n):
    for x in range(2, int(n**0.5)+1):
        if n % x**2 == 0:
            return True
    return False

def sum_dig(n):
    return sum(list(map(int, str(n))))

a = []
for n in range(2945, 18295):
    if not div2(n):
        a.append(n)

s = 0
for i in range(len(a)):
    s += sum_dig(a[i])

print(s)

Ответ: 177084

ЕГЭ. Поляков-2592

Среди целых чисел, принадлежащих числовому отрезку \( [87921; \,\, 88187]\), найдите числа, сумма цифр которых кратна \(14\), а произведение цифр кратно \(18\) и не равно \(0\). Для каждого найденного числа запишите сумму и произведение его цифр в таблицу на экране с новой строки в порядке возрастания произведения цифр. (С.А. Скопинцева)

Решение:

Python


def n2arr(n):
    return list(map(int, str(n)))

def prod(a):
    p = 1
    for i in range(len(a)):
        p *= a[i]
    return p

res=[]
for x in range(87921, 88188):
    temp_arr = n2arr(x)
    s_arr = sum(temp_arr)
    p_arr = prod(temp_arr)
    if s_arr % 14 == 0 and p_arr and p_arr % 18 == 0:
        res.append((s_arr, p_arr))

for t in sorted(res, key=lambda v: v[1]):
    print(t[0], t[1])

Ответ:
\( 28 \,\, 1152\)
\( 28 \,\, 1512\)
\( 28 \,\, 2016\)
\( 42 \,\, 40824\)

ЕГЭ. Поляков-2591

Определите количество простых чисел в диапазоне \( [2; \,\, 200000]\). (Д.Ф. Муфаззалов)

Решение:

Python


def sieve(N):
    a = [1]*(N+1)

    a[0] = 0
    a[1] = 0

    for x in range(2, int(N**0.5) + 1):
        if a[x]:
            for i in range(x**2, N+1, x):
                a[i] = 0
                
    primes = []
    for x in range(2, N+1):
        if a[x]:
            primes.append(x)
    
    return primes

print(len(sieve(200000)))

Ответ: 17984

ЕГЭ. Поляков-2590

(Д.Ф. Муфаззалов) Определите количество простых чисел в диапазоне \( [2; \,\, 3577000]\).

Решение:

Python


def sieve(N):
    a = [1]*(N+1)

    a[0] = 0
    a[1] = 0

    for x in range(2, int(N**0.5) + 1):
        if a[x]:
            for i in range(x**2, N+1, x):
                a[i] = 0
                
    primes = []
    for x in range(2, N+1):
        if a[x]:
            primes.append(x)
    
    return primes

print(len(sieve(3577000)))

Java


import java.util.ArrayList;

public class EGE2590 {

    static ArrayList<Integer> Sieve(int N) {
        int a[] = new int[N];
        a[0] = 0;
        a[1] = 0;
        for(int i = 0; i < N; i++) {
            a[i] = 1;
        }
        for(int i = 2; i < (int) Math.sqrt(N) + 1; i++) {
            if(a[i] == 1) {
                for(int j = i*i; j < N; j += i) {
                    a[j] = 0;
                }
            }
        }
        ArrayList<Integer> primes = new ArrayList<Integer>();
        for(int i = 2; i < N; i++) {
            if(a[i] == 1) {
                primes.add(i);
            }
        }
        return primes;

    }
    public static void main(String argv[]) {
        ArrayList<Integer> primes = Sieve(3577000);
        System.out.println(primes.size());
    }
}

Ответ: 255203

ЕГЭ. Поляков-2589

(Д.Ф. Муфаззалов) Два числа называются дружественными если сумма собственных делителей (то есть всех положительных делителей, отличных от самого́ числа) любого их них равна другому числу. Например, числа \(220\) и \(284\) дружественные. Выведите в порядке возрастания числа в диапазоне \( [2; \,\, 30000]\), имеющие дружественное число, большее чем само это число, и через пробел это дружественное число. Каждое следующие число из указанного диапазона выводите на новой строке.

Решение:

Python


def divisors(n):
    d = set()
    d.add(1)
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            d.add(x)
            d.add(n // x)
    return d

for x in range(2, 30001):
    sum_div = sum(divisors(x))
    if sum_div > x and x == sum(divisors(sum_div)):
        print(x, sum_div)

Ответ:
\( 220 \,\, 284\)
\( 1184 \,\, 1210\)
\( 2620 \,\, 2924\)
\( 5020 \,\, 5564\)
\( 6232 \,\, 6368\)
\( 10744 \,\, 10856\)
\( 12285 \,\, 14595\)
\( 17296 \,\, 18416\)

ЕГЭ. Поляков-2588

(Д.Ф. Муфаззалов) Совершенным называется число, натуральное число, равное сумме всех своих собственных делителей (то есть всех положительных делителей, отличных от самого́ числа) (например, число \( 6=1+2+3 \)). ) Выведите каждое совершенное число из диапазона \( [2; \,\, 10000]\) и количество его собственных делителей в порядке возрастания. Вывод каждого совершенного числа начинайте с новой строки. Числа в строке разделяйте пробелом.

Решение:

Python


def divisors(n):
    d = set()
    d.add(1)
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            d.add(x)
            d.add(n // x)
    return d

for x in range(2, 10001):
    d = divisors(x)
    if x == sum(d):
        print(x, len(d))

Ответ:
\( 6 \,\, 3\)
\( 28 \,\, 5\)
\( 496 \,\, 9\)
\( 8128 \,\, 13\)

ЕГЭ. Поляков-2587

(Б.С. Михлин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \( [194441; \,\, 196500]\) простые числа (т.е. числа у которых только два делителя: \(1\) и само число), оканчивающиеся на \(93\). Для каждого простого числа выведите его порядковый номер (начиная с единицы), а затем – само число.

Решение:

Python


def is_prime(n):
    if n == 2 or n == 3:
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

i = 1
for x in range(194493, 196501, 100):
    if is_prime(x):
        print(i, x)
        i += 1

Ответ:
\( 1 \,\, 195193\)
\( 2 \,\, 195493\)
\( 3 \,\, 195593\)
\( 4 \,\, 195893\)
\( 5 \,\, 196193\)

ЕГЭ. Поляков-2586

(А.Н. Носкин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \( [2532000; \,\, 2532160]\), простые числа. Найдите все простые числа, которые заканчиваются на цифру \(7\). Выведите их в порядке возрастания, слева от каждого числа выведите его номер по порядку.

Решение:

Python


def is_prime(n):
    if n == 2 or n == 3:
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

i = 1
for x in range(2532007, 2532161, 10):
    if is_prime(x):
        print(i, x)
        i += 1

Ответ:
\( 1 \,\, 2532007\)
\( 2 \,\, 2532067\)
\( 3 \,\, 2532107\)
\( 4 \,\, 2532137\)
\( 5 \,\, 2532157\)

ЕГЭ. Поляков-2585

(А.Н. Носкин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \( [2532000; \,\, 2532160]\) первые пять простых чисел. Выведите найденные простые числа в порядке возрастания, слева от каждого числа выведите его номер по порядку.

Решение:

Python


def is_prime(n):
    if n == 2 or n == 3:
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

i = 1
for x in range(2532000, 2532161):
    if is_prime(x):
        print(i, x)
        i += 1
    if i > 5:
        break

Ответ:
\( 1 \,\, 2532007\)
\( 2 \,\, 2532067\)
\( 3 \,\, 2532071\)
\( 4 \,\, 2532083\)
\( 5 \,\, 2532107\)

ЕГЭ. Поляков-2584

(А.Н. Носкин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \( [3532000; \,\, 3532160]\), простые числа. Выведите все найденные простые числа в порядке убывания, слева от каждого числа выведите его номер по порядку.

Решение:

Python


def is_prime(n):
    if n == 2 or n == 3:
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

i = 1
for x in range(3532160, 3532000, -1):
    if is_prime(x):
        print(i, x)
        i += 1

Ответ:
\( 1 \,\, 3532147\)
\( 2 \,\, 3532121\)
\( 3 \,\, 3532103\)
\( 4 \,\, 3532091\)
\( 5 \,\, 3532049\)
\( 6 \,\, 3532033\)
\( 7 \,\, 3532021\)
\( 8 \,\, 3532019\)
\( 9 \,\, 3532007\)

ЕГЭ. Поляков-2583

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \( [7178551; \,\, 7178659]\), простые числа. Выведите все найденные простые числа в порядке возрастания, слева от каждого числа выведите его номер по порядку.

Решение:

Python


def is_prime(n):
    if n == 2 or n == 3:
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

i = 1
for x in range(7178551, 7178660):
    if is_prime(x):
        print(i, x)
        i += 1

Ответ:
\( 1 \,\, 7178609\)
\( 2 \,\, 7178617\)
\( 3 \,\, 7178621\)
\( 4 \,\, 7178623\)
\( 5 \,\, 7178627\)
\( 6 \,\, 7178653\)
\( 7 \,\, 7178657\)
\( 8 \,\, 7178659 \)

ЕГЭ. Поляков-2582

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \( [2532421; \,\, 2532491]\), простые числа. Выведите все найденные простые числа в порядке возрастания, слева от каждого числа выведите его номер по порядку.

Решение:

Python


def is_prime(n):
    if n == 2 or n == 3:
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

i = 1
for x in range(2532421, 2532492):
    if is_prime(x):
        print(i, x)
        i += 1

Ответ:
\(1 \,\, 2532433\)
\(2 \,\, 2532437\)
\(3 \,\, 2532449\)
\(4 \,\, 2532451\)
\(5 \,\, 2532479\)
\(6 \,\, 2532487\)

ЕГЭ. Поляков-2581

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \( [4301614; \, 4301717]\), простые числа. Выведите все найденные простые числа в порядке возрастания, слева от каждого числа выведите его номер по порядку.

Решение:

Python


def is_prime(n):
    if n == 2 or n == 3:
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

i = 1
for x in range(4301614, 4301718):
    if is_prime(x):
        print(i, x)
        i += 1

Ответ:
\( 1 \,\, 4301623 \)
\( 2 \,\, 4301669 \)
\( 3 \,\, 4301699 \)
\( 4 \,\, 4301701 \)
\( 5 \,\, 4301707 \)

ЕГЭ. Поляков-2580

(Б.С. Михлин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([586132; \, 586430]\), числа, имеющие максимальное количество различных делителей. Найдите минимальное и максимальное из таких чисел. В ответе для каждого из них запишите два числа: количество делителей и наибольший делитель, не равный самому числу.

Решение:

Python


def search_div(n):

    divisors = set()

    for i in range(1, int(n**0.5)+1):
        if not n % i:
            divisors.add(i)
            divisors.add(n//i)
    
    return divisors

count_d = 0
max_d = 0
min_d = 0

for n in range(586132, 586431):
    divisors = [*search_div(n)]
    c = len(divisors)
    if c > count_d:
        count_d = c
        divisors.sort()
        min_d = divisors[-2]
    elif c == count_d:
        divisors.sort()
        max_d = divisors[-2]

print(count_d, min_d)
print(count_d, max_d)

Ответ:
80   293112
80   293160

ЕГЭ. Поляков-2579

(Б.С. Михлин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([286564; \, 287270]\), числа, имеющие максимальное количество различных делителей. Если таких чисел несколько, то найдите максимальное из них. В ответе запишите два числа: количество делителей найденного числа и его наибольший делитель, не равный самому числу.

Решение:

Python


def search_div(n):

    divisors = set()

    for i in range(1, int(n**0.5)+1):
        if not n % i:
            divisors.add(i)
            divisors.add(n//i)
    
    return divisors

count_d = 0
max_d = 0

for n in range(286564, 287271):
    divisors = [*search_div(n)]
    c = len(divisors)
    if count_d <= c:
        count_d = c
        divisors.sort()
        max_d = divisors[-2]

print(count_d, max_d)

Ответ: 112   143520

ЕГЭ. Поляков-2578

(Б.С. Михлин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([394441; \, 394505]\), числа, имеющие максимальное количество различных делителей. Если таких чисел несколько, то найдите минимальное из них. В ответе запишите два числа: количество делителей найденного числа и само число.

Решение:

Python


def search_div(n):

    divisors = set()

    for i in range(1, int(n**0.5)+1):
        if not n % i:
            divisors.add(i)
            divisors.add(n//i)
    
    return divisors

n_max_d = 0
max_d = 0

for n in range(394441, 394506):
    d = len(search_div(n))
    if d > max_d:
        max_d, n_max_d = d, n

print(max_d, n_max_d)

Ответ: 48   394450

ЕГЭ. Поляков-2577

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([1820348; \, 2880927]\), числа, имеющие ровно \(5\) различных делителей. В ответе для каждого найденного числа запишите два его наибольших делителя в порядке возрастания.

Решение:

Python


import math

def is_prime(n):
    if n == 1:
        return False
    if n in (2, 3):
        return True
    for i in range(2, int(n**0.5)+1):
        if not n % i:
            return False
    return True

d = math.ceil(1820348**0.25)

while 1820348 <= d ** 4 <= 2880927:
    if is_prime(d):
        print(d**3, d**4)
    d += 1

Ответ:
50653   1874161
68921   2825761

ЕГЭ. Поляков-2576

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([652938; \, 1744328]\), числа, имеющие ровно \(5\) различных делителей. В ответе для каждого найденного числа запишите два его наибольших делителя, не равных самому числу, в порядке возрастания.

Решение:

Python


import math

def is_prime(n):
    if n == 1:
        return False
    if n in (2, 3):
        return True
    for i in range(2, int(n**0.5)+1):
        if not n % i:
            return False
    return True

d = math.ceil(652938**0.25)

while 652938 <= d ** 4 <= 1744328:
    if is_prime(d):
        print(d**2, d**3)
    d += 1

Ответ:
841   24389
961   29791

ЕГЭ. Поляков-2575

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([244143; \, 1367821]\), числа, имеющие ровно \(5\) различных делителей. В ответе для каждого найденного числа запишите два его наибольших делителя, не равных самому числу, в порядке возрастания.

Решение:

Python


import math

def is_prime(n):
    if n == 1:
        return False
    if n in (2, 3):
        return True
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True

d = math.ceil(244143**0.25)

while 244143 <= d ** 4 <= 1367821:
    if is_prime(d):
        print(d**2, d**3)
    d += 1

Ответ:
529   12167
841   24389
961   29791

ЕГЭ. Поляков-2574

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([11275; \, 16328]\), числа, имеющие ровно \(5\) различных делителей. В ответе для каждого найденного числа запишите два его наибольших делителя, не равных самому числу, в порядке возрастания.

Решение:

Python


import math

def is_prime(n):
    if n == 1:
        return False
    if n in (2, 3):
        return True
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True

d = math.ceil(11275**0.25)

while 11275 <= d ** 4 <= 16328:
    if is_prime(d):
        print(d**2, d**3)
    d += 1

Ответ: 121   1331

ЕГЭ. Поляков-2573

(А.Н. Носкин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([190061; \, 190072]\), числа, имеющие ровно \(4\) различных НЕЧЁТНЫХ делителя. В ответе для каждого найденного числа запишите два его наибольших нечётных делителя в порядке убывания.

Решение:

Python


def find_div(n):
    divisors = set()
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            if i % 2:
                divisors.add(i)
            if n // i % 2:
                divisors.add(n//i)
        if len(divisors) > 4:
            break
    return divisors

for i in range(190061, 190073):
    d = [*find_div(i)]
    if len(d) == 4:
        d.sort()
        print(d[3], d[2])

Ответ:
190061   6131
11879 1  697
190067   2677
23759   1033

ЕГЭ. Поляков-2572

(А.Н. Носкин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([190201; \, 190260]\), числа, имеющие ровно \(4\) различных ЧЁТНЫХ делителя. В ответе для каждого найденного числа запишите два его наибольших ЧЁТНЫХ делителя в порядке убывания.

Решение:

Python


def find_div(n):
    divisors = set()
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            if i % 2 == 0:
                divisors.add(i)
            if n // i % 2 == 0:
                divisors.add(n//i)
        if len(divisors) > 4:
            break
    return divisors

for i in range(190201, 190261):
    d = [*find_div(i)]
    if len(d) == 4:
        d.sort()
        print(d[3], d[2])

Ответ:
190226   838
190234   17294
190238   2606
190252   95126
190258   758

ЕГЭ. Поляков-2571

(А.Н. Носкин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([190201; \, 190220]\), числа, имеющие ровно 4 различных делителя. В ответе для каждого найденного числа запишите два его наибольших делителя в порядке убывания.

Решение:

Python


def find_div(n):
    divisors = set()
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
        if len(divisors) > 4:
            break
    return divisors

for i in range(190201, 190221):
    d = [*find_div(i)]
    if len(d) == 4:
        d.sort()
        print(d[3], d[2])

Ответ:
190201   17291
190202   95101
190214   95107
190219   853

ЕГЭ. Поляков-2570

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([135743; \, 135789]\), числа, имеющие ровно \(6\) различных делителей. В ответе для каждого найденного числа запишите два его наибольших делителя в порядке возрастания.

Решение:

Python


def find_div(n):
    divisors = set()
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
        if len(divisors) > 6:
            break
    return divisors

for i in range(135743, 135790):
    d = [*find_div(i)]
    if len(d) == 6:
        d.sort()
        print(d[4], d[5])

Ответ:
45249   135747
67874   135748
67882   135764
27155   135775

ЕГЭ. Поляков-2569

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([180131; \, 180179]\), числа, имеющие ровно \(6\) различных делителей. В ответе для каждого найденного числа запишите два его наибольших делителя в порядке возрастания.

Решение:

Python


def find_div(n):
    divisors = set()
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
        if len(divisors) > 6:
            break
    return divisors

for i in range(180131, 180180):
    d = [*find_div(i)]
    if len(d) == 6:
        d.sort()
        print(d[4], d[5])

Ответ:
9481   180139
16379   180169
25739   180173
36035   180175

ЕГЭ. Поляков-2568

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([164700; \, 164752]\), числа, имеющие ровно \(6\) различных делителей. В ответе для каждого найденного числа запишите два его наибольших делителя в порядке возрастания.

Решение:

Python


def find_div(n):
    divisors = set()
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
        if len(divisors) > 6:
            break
    return divisors

for i in range(164700, 164753):
    d = [*find_div(i)]
    if len(d) == 6:
        d.sort()
        print(d[4], d[5])

Ответ:
82354 164708
54903 164709
82358 164716
82366 164732

ЕГЭ. Поляков-2567

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([338472; \, 338494]\), числа, имеющие ровно \(4\) различных делителя. В ответе для каждого найденного числа запишите два его наибольших делителя в порядке возрастания.

Решение:

Python


def find_div(n):
    divisors = set()
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
        if len(divisors) > 4:
            break
    return divisors

for i in range(338472, 338495):
    d = [*find_div(i)]
    if len(d) == 4:
        d.sort()
        print(d[2], d[3])

Ответ:
1249   338479
169241   338482
5737   338483
169243   338486
14717   338491
112831   338493

ЕГЭ. Поляков-2566

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([251811; \, 251826]\), числа, имеющие ровно \(4\) различных делителя. В ответе для каждого найденного числа запишите два его наибольших делителя в порядке возрастания.

Решение:

Python


def find_div(n):
    divisors = set()
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
        if len(divisors) > 4:
            break
    return divisors

for i in range(251811, 251827):
    d = [*find_div(i)]
    if len(d) == 4:
        d.sort()
        print(d[2], d[3])

Ответ:
8123   251813
50363   251815
83939   251817
601   251819
14813   251821

ЕГЭ. Поляков-2565

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([154026; \, 154043]\), числа, имеющие ровно \(4\) различных делителя. В ответе для каждого найденного числа запишите два его наибольших делителя в порядке возрастания.

Решение:

Python


def find_div(n):
    divisors = set()
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
        if len(divisors) > 4:
            break
    return divisors

for i in range(154026, 154044):
    d = [*find_div(i)]
    if len(d) == 4:
        d.sort()
        print(d[2], d[3])

Ответ:
51343   154029
77017   154034
4969   154039
51347   154041

ЕГЭ. Поляков-2564

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \([194455; 194500]\), числа, имеющие ровно 4 различных делителя. В ответе для каждого найденного числа запишите два его наибольших делителя в порядке возрастания.

Решение:

Python


def find_div(n):
    divisors = set()
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
        if len(divisors) > 4:
            break
    return divisors

for i in range(194455, 194501):
    d = [*find_div(i)]
    if len(d) == 4:
        d.sort()
        print(d[2], d[3])

Ответ:
38891   194455
1193   194459
1399   194461
97231   194462
1721   194473
443   194477
97241   194482
4523   194489
17681   194491

ЕГЭ. Поляков-2563

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку \( [3532000; \, 3532160]\), простые числа. Выведите все найденные простые числа в порядке возрастания, слева от каждого числа выведите его номер по порядку.

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    elif n in (2, 3):
        return True
    else:
        for i in range(2, int(n**0.5) + 1):
            if not n % i:
                return False
        return True

k = 1
for i in range(3532000, 3532161):
    if is_prime(i):
        print(k, i)
        k += 1

Ответ:
1   3532007
2   3532019
3   3532021
4   3532033
5   3532049
6   3532091
7   3532103
8   3532121
9   3532147

ЕГЭ 2024. Пересдача. 04.07.2024

Напишите программу, которая перебирает целые числа, больше \(700~000\), в порядке возрастания и ищет среди них такие, у которых есть натуральный делитель, оканчивающийся на цифру \(7\) и не равный ни самому числу, ни числу \(7\). Выведите первые пять найденных чисел и для каждого — соответствующий наименьший делитель, оканчивающийся на цифру \(7\), не равный ни самому числу, ни числу \(7\).

Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем — значение наименьшего делителя, оканчивающегося на цифру \(7\), не равного ни самому числу, ни числу \(7\).
Строки выводятся в порядке возрастания найденных чисел.

Количество строк в таблице для ответа избыточно.

Решение:

Python


def divisors(n):
    d = []
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            d.append(i)
            d.append(n // i)

    return sorted(d)

k = 0
n = 700_000

while k < 5:
    n += 1
    for d in divisors(n):
        if d % 10 == 7 and d != 7:
            k += 1
            print(n, d)
            break

Ответ:
\(700002 \,\, 27\)
\(700003 \,\, 37\)
\(700005 \,\, 6087\)
\(700007 \,\, 77\)
\(700008 \,\, 29167\)

ЕГЭ 2024. Резерв. 18.06.2024

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

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

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

Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, соответствующие маске \(89*4?5?7?\), делящиеся на \(8993\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие результаты деления этих чисел на \(8993\).

Количество строк в таблице для ответа избыточно.

Решение:

Python


from fnmatch import fnmatch

n = 89405070 - 89405070 % 8993 + 8993

for x in range(n, 10**10, 8993):
    if fnmatch(str(x), '89*4?5?7?'):
        print(x, x // 8993)

Ответ:
\(8912485671 \,\, 991047\)
\(8915435375 \,\, 991375\)
\(8917485779 \,\, 991603\)
\(8934455570 \,\, 993490\)
\(8937405274 \,\, 993818\)
\(8939455678 \,\, 994046\)
\(8958475873 \,\, 996161\)
\(8961425577 \,\, 996489\)
\(8980445772 \,\, 998604\)

ЕГЭ 2024. Основная волна. 07.06.2024

Пусть \(M\) — сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то значение \(M\) считается равным нулю.

Напишите программу, которая перебирает целые числа, большие \(800~000\), в порядке возрастания и ищет среди них такие, для которых значение \(M\) оканчивается на \(4\). В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце — соответствующие им значения \(M\).

Например, для числа \(20\) \(M = 2 + 10 = 12\).

Количество строк в таблице для ответа избыточно.

Решение:

Python


def divisors_sum(n):
    d1 = d2 = 0
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            d1 = x
            tmp = n // x
            if tmp != d1:
                d2 = tmp
            break
    return d1 + d2

i = 0
N = 800_000

while i < 5:
    N += 1
    M = divisors_sum(N)
    if M % 10 == 4:
        print(N, M)
        i += 1

Ответ:
\(800004 \,\, 400004\)
\(800009 \,\, 114294\)
\(800013 \,\, 266674\)
\(800024 \,\, 400014\)
\(800033 \,\, 61554\)

ЕГЭ 2024. Лещинер-1

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300405\).

Среди натуральных чисел, не превышающих \(10^{8}\), найдите все числа, соответствующие маске \(2*1?5?1\), делящиеся на \(1921\) без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на 1921.
Количество строк в таблице для ответа избыточно.

Решение:

Python


from fnmatch import fnmatch

for num in range(210501, 10**8 + 1):
    if fnmatch(str(num), '2*1?5?1') and num % 1921 == 0:
        print(num, num // 1921)

Ответ:
\(2710531\) \(1411\)
\(22016581\) \(11461\)
\(23015501\) \(11981\)
\(23111551\) \(12031\)
\(27318541\) \(14221\)
\(27414591\) \(14271\)
\(28413511\) \(14791\)

Демо 2024

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300405\).

Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, соответствующие маске \(1?2157*4\), делящиеся на \(2024\) без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на 2023.
Количество строк в таблице для ответа избыточно.

Решение:

Python


subs = [''] + [f'00{x}' for x in range(10)] + [f'0{x}' for x in range(100)] + [x for x in range(1000)]

nums = []

for s in subs:
    for d in range(10):
        n = int(f'1{d}2157{s}4')
        if n % 2024 == 0:
            nums.append((n, n // 2024))

nums.sort(key=lambda i: i[0])
print(*nums, sep='\n')

Ответ:
\(142157664\)    \(70236\)
\(1021575544\)    \(504731\)
\(1121571264\)    \(554136\)
\(1221577104\)    \(603546\)
\(1321572824\)    \(652951\)
\(1421578664\)    \(702361\)
\(1521574384\)    \(751766\)
\(1621570104\)    \(801171\)
\(1721575944\)    \(850581\)
\(1821571664\)    \(899986\)
\(1921577504\)    \(949396\)

Апробация 10.03.2023

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

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

Среди натуральных чисел, не превышающих \(10^{9}\), найдите все числа, соответствующие маске \(2*5443?1\), делящиеся на \(23\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на \(23\). Количество строк в таблице для ответа избыточно.

Решение:

Python


for n in range(2):
    for k in range(10**n):
        for j in range(10):
            z = 2 * 10**(6+n) + k * 10**6 + 5443 * 100 + j * 10 + 1
            if z % 23 == 0:
                print(z, z//23)

Ответ:
\(22544301\)    \(980187\)
\(23544341\)    \(1023667\)
\(24544381\)    \(1067147\)
\(28544311\)    \(1241057\)
\(29544351\)    \(1284537\)

Статград 2023-2-2

Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр.
Пример. Маске \(123*4?5\) соответствуют числа \(123405\) и \(12376415\).
Найдите все натуральные числа, не превышающие \(10^{9}\), которые соответствуют маске \(12*93?1?\) и при этом без остатка делятся на \(3127\).
В ответе запишите все найденные числа в порядке возрастания.

Решение:

Python


for n in range(3):
    for k in range(10**n):
        for x in range(10):
            for y in range(10):
                z = 12 * 10**(5+n) + k * 10**5 + 93 * 10**3 + x * 100 + 10 + y
                if z % 3127 == 0:
                    print(z)

Ответ:
\(120993011\)
\(122093715\)
\(126193212\)
\(127293916\)

Статград 2023-2-1

Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр.
Пример. Маске \(123*4?5\) соответствуют числа \(123405\) и \(12376415\).
Найдите все натуральные числа, не превышающие \(10^{9}\), которые соответствуют маске \(12*63?5?\) и при этом без остатка делятся на \(3123\).
В ответе запишите все найденные числа в порядке возрастания.

Решение:

Python


for n in range(3):
    for k in range(10**n):
        for x in range(10):
            for y in range(10):
                z = 12 * 10**(5+n) + k * 10**5 + 63 * 10**3 + x * 100 + 50 + y
                if z % 3123 == 0:
                    print(z)

Ответ:
\(12363957\)
\(120663351\)
\(120963159\)
\(124763850\)
\(125063658\)

Статград 2023-1-2

Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр.
Пример. Маске \(123*4?5\) соответствуют числа \(123405\) и \(12376415\).
Найдите все натуральные числа, не превышающие \(10^{10}\), которые соответствуют маске \(1?954*21\) и при этом без остатка делятся на \(3023\).
В ответе запишите все найденные числа в порядке возрастания.

Решение:

Python


for n in range(4):
    for k in range(10):
        for i in range(10**n):
            x = 10**(6 + n) + k * 10**(5 + n) + 954 * 10**(2 + n) + i * 10**2 + 21
            if x % 3023 == 0:
                print(x)

Ответ:
\(1895421\)
\(1295437121\)
\(1395498421\)
\(1795441321\)

Статград 2023-1-1

Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр.
Пример. Маске \(123*4?5\) соответствуют числа \(123405\) и \(12376415\).
Найдите все натуральные числа, не превышающие \(10^{10}\), которые соответствуют маске \(1?493*41\) и при этом без остатка делятся на \(2023\).
В ответе запишите все найденные числа в порядке возрастания.

Решение:

Python


for n in range(4):
    for i in range(10**n):
        for k in range(10):
            x = 10**(6 + n) + k * 10**(5 + n) + 493 * 10**(2 + n) + i * 10**2 + 41
            if x % 2023 == 0:
                print(x)

Ответ:
\(1349341\)
\(1249338041\)
\(1549348941\)
\(1849359841\)

2023-20

Пусть \(S\) — сумма различных натуральных делителей целого числа, являющихся простыми числами, не считая самого числа.
Напишите программу, которая перебирает целые числа, большие \(550~000\), в порядке возрастания и ищет среди них такие, для которых значение \(S\) оканчивается на цифру \(7\). Программа должна найти и вывести первые \(5\) таких чисел и соответствующие им значения \(S\).
Формат вывода: для каждого из \(5\) таких найденных чисел в отдельной строке сначала выводится само число, затем значение \(S\). Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(20\) \(S = 2 + 5 = 7\).

Решение:

Python


def divisors(n: int) -> set[int]:
    s = set()
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            s.add(x)
            s.add(n//x)
    return s

def is_prime(n: int) -> bool:
    if n == 1:
        return False
    if n in (2, 3):
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

def prime_divisors(n: int) -> set[int]:
    div = divisors(n)
    if div:
        return set(filter(is_prime, div))

n = 550001
k = 0

while k < 5:
    if pd := prime_divisors(n):
        S = sum(pd)
        if S % 10 == 7:
            print(n, S)
            k += 1
    n += 1

Ответ:
\(550018\) \(2337\)
\(550059\) \(1197\)
\(550087\) \(257\)
\(550099\) \(1217\)
\(550137\) \(117\)

2023-19

Пусть \(S\) — сумма различных натуральных делителей целого числа, являющихся простыми числами, не считая самого числа.
Напишите программу, которая перебирает целые числа, большие \(550~000\), в порядке возрастания и ищет среди них такие, для которых значение \(S\) оканчивается на цифру \(1\). Программа должна найти и вывести первые \(5\) таких чисел и соответствующие им значения \(S\).
Формат вывода: для каждого из \(5\) таких найденных чисел в отдельной строке сначала выводится само число, затем значение \(S\). Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(20\) \(S = 2 + 5 = 7\).

Решение:

Python


def divisors(n: int) -> set[int]:
    s = set()
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            s.add(x)
            s.add(n//x)
    return s

def is_prime(n: int) -> bool:
    if n == 1:
        return False
    if n in (2, 3):
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

def prime_divisors(n: int) -> set[int]:
    div = divisors(n)
    if div:
        return set(filter(is_prime, div))

n = 550001
k = 0

while k < 5:
    if pd := prime_divisors(n):
        S = sum(pd)
        if S % 10 == 1:
            print(n, S)
            k += 1
    n += 1

Ответ:
\(550023\) \(1461\)
\(550025\) \(461\)
\(550030\) \(4251\)
\(550043\) \(1501\)
\(550045\) \(4811\)

2023-18

Напишите программу, которая перебирает целые числа, большие \(750~000\), в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения упомянутых делителей.
Формат вывода: для каждого из \(6\) таких натуральных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(105\) наибольший натуральный делитель \(35\) не является простым, для числа \(15\) наибольший натуральный делитель \(5\) — простое число, а для числа \(13\) такого делителя не существует.

Решение:

Python


def is_prime(n: int) -> bool:
    if n == 1:
        return False
    if n in (2, 3):
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True


def min_divisor(n: int) -> int:
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1


def max_divisor(n: int) -> int:
    return n // min_divisor(n)


n = 750001
k = 0

while k < 6:
    md = max_divisor(n)
    if md < n and not is_prime(md):
        print(n, md)
        k += 1
    n += 1

Ответ:
\(750001\) \(107143\)
\(750002\) \(375001\)
\(750003\) \(250001\)
\(750004\) \(375002\)
\(750006\) \(375003\)
\(750008\) \(375004\)

2023-17

Напишите программу, которая перебирает целые числа, большие \(650~000\), в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения упомянутых делителей.
Формат вывода: для каждого из \(6\) таких натуральных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(105\) наибольший натуральный делитель \(35\) не является простым, для числа \(15\) наибольший натуральный делитель \(5\) — простое число, а для числа \(13\) такого делителя не существует.

Решение:

Python


def is_prime(n: int) -> bool:
    if n == 1:
        return False
    if n in (2, 3):
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True


def min_divisor(n: int) -> int:
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1


def max_divisor(n: int) -> int:
    return n // min_divisor(n)


n = 650001
k = 0

while k < 6:
    md = max_divisor(n)
    if md < n and not is_prime(md):
        print(n, md)
        k += 1
    n += 1

Ответ:
\(650001\) \(216667\)
\(650003\) \(28261\)
\(650004\) \(325002\)
\(650005\) \(130001\)
\(650006\) \(325003\)
\(650007\) \(216669\)

2023-16

Напишите программу, которая перебирает целые числа, большие \(350~000\), в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения упомянутых делителей.
Формат вывода: для каждого из \(6\) таких натуральных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(105\) наибольший натуральный делитель \(35\) не является простым, для числа \(15\) наибольший натуральный делитель \(5\) — простое число, а для числа \(13\) такого делителя не существует.

Решение:

Python


def is_prime(n: int) -> bool:
    if n == 1:
        return False
    if n in (2, 3):
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True


def min_divisor(n: int) -> int:
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1


def max_divisor(n: int) -> int:
    return n // min_divisor(n)


n = 350001
k = 0

while k < 6:
    md = max_divisor(n)
    if md < n and not is_prime(md):
        print(n, md)
        k += 1
    n += 1

Ответ:
\(350001\) \(116667\)
\(350002\) \(175001\)
\(350004\) \(175002\)
\(350007\) \(116669\)
\(350008\) \(175004\)
\(350009\) \(31819\)

2023-15

Напишите программу, которая перебирает целые числа, большие \(450~000\), в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения упомянутых делителей.
Формат вывода: для каждого из \(6\) таких натуральных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(105\) наибольший натуральный делитель \(35\) не является простым, для числа \(15\) наибольший натуральный делитель \(5\) — простое число, а для числа \(13\) такого делителя не существует.

Решение:

Python


def is_prime(n: int) -> bool:
    if n == 1:
        return False
    if n in (2, 3):
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True


def min_divisor(n: int) -> int:
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1


def max_divisor(n: int) -> int:
    return n // min_divisor(n)


n = 450001
k = 0

while k < 6:
    md = max_divisor(n)
    if md < n and not is_prime(md):
        print(n, md)
        k += 1
    n += 1

Ответ:
\(450002\) \(225001\)
\(450004\) \(225002\)
\(450006\) \(225003\)
\(450007\) \(26471\)
\(450008\) \(225004\)
\(450009\) \(150003\)

2023-14

Напишите программу, которая перебирает целые числа, большие \(550~000\), в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения упомянутых делителей.
Формат вывода: для каждого из \(6\) таких натуральных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(105\) наибольший натуральный делитель \(35\) не является простым, для числа \(15\) наибольший натуральный делитель \(5\) — простое число, а для числа \(13\) такого делителя не существует.

Решение:

Python


def is_prime(n: int) -> bool:
    if n == 1:
        return False
    if n in (2, 3):
        return True
    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True


def min_divisor(n: int) -> int:
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1


def max_divisor(n: int) -> int:
    return n // min_divisor(n)


n = 550001
k = 0

while k < 6:
    md = max_divisor(n)
    if md < n and not is_prime(md):
        print(n, md)
        k += 1
    n += 1

Ответ:
\(550002\) \(275001\)
\(550004\) \(275002\)
\(550005\) \(183335\)
\(550008\) \(275004\)
\(550010\) \(275005\)
\(550011\) \(183337\)

2023-13

Пусть \(F\) — разность максимального и минимального делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(F\) равным нулю.
Напишите программу, которая перебирает целые числа, большие \(850~000\), в порядке возрастания и ищет среди них такие, для которых значение \(F\) не равно нулю и делится нацело на \(13\). Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения \(F\).
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(F\).
Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(105\) \(F = 35-3=32\).

Решение:

Python


def min_divisor(n):
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1

k = 0
n = 850001

while k < 6:
    md = min_divisor(n)
    if md > 1:
        F = n // md - md
        if F and F % 13 == 0:
            print(n, F)
            k += 1
    n += 1

Ответ:
\(850022\) \(425009\)
\(850048\) \(425022\)
\(850053\) \(283348\)
\(850074\) \(425035\)
\(850099\) \(7410\)
\(850100\) \(425048\)

2023-12

Пусть \(F\) — разность максимального и минимального делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(F\) равным нулю.
Напишите программу, которая перебирает целые числа, большие \(850~000\), в порядке возрастания и ищет среди них такие, для которых значение \(F\) не равно нулю и делится нацело на \(11\). Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения \(F\).
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(F\).
Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(105\) \(F = 35-3=32\).

Решение:

Python


def min_divisor(n):
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1

k = 0
n = 850001

while k < 6:
    md = min_divisor(n)
    if md > 1:
        F = n // md - md
        if F and F % 11 == 0:
            print(n, F)
            k += 1
    n += 1

Ответ:
\(850018\) \(425007\)
\(850019\) \(29282\)
\(850023\) \(283338\)
\(850040\) \(425018\)
\(850062\) \(425029\)
\(850084\) \(425040\)

2023-11

Пусть \(F\) — разность максимального и минимального делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(F\) равным нулю.
Напишите программу, которая перебирает целые числа, большие \(850~000\), в порядке возрастания и ищет среди них такие, для которых значение \(F\) не равно нулю и делится нацело на \(3\). Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения \(F\).
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(F\).
Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(105\) \(F = 35-3=32\).

Решение:

Python


def min_divisor(n):
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1

k = 0
n = 850001

while k < 6:
    md = min_divisor(n)
    if md > 1:
        F = n // md - md
        if F and F % 3 == 0:
            print(n, F)
            k += 1
    n += 1

Ответ:
\(850003\) \(121422\)
\(850005\) \(283332\)
\(850006\) \(425001\)
\(850012\) \(425004\)
\(850015\) \(169998\)
\(850018\) \(425007\)

2023-10

Пусть \(F\) — разность максимального и минимального делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(F\) равным нулю.
Напишите программу, которая перебирает целые числа, большие \(850~000\), в порядке возрастания и ищет среди них такие, для которых значение \(F\) не равно нулю и делится нацело на \(5\). Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения \(F\).
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(F\).
Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(105\) \(F = 35-3=32\).

Решение:

Python


def min_divisor(n):
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1

k = 0
n = 850001

while k < 6:
    md = min_divisor(n)
    if md > 1:
        F = n // md - md
        if F and F % 5 == 0:
            print(n, F)
            k += 1
    n += 1

Ответ:
\(850004\) \(425000\)
\(850014\) \(425005\)
\(850024\) \(425010\)
\(850025\) \(170000\)
\(850029\) \(283340\)
\(850034\) \(425015\)

2023-9

Пусть \(F\) — разность максимального и минимального делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(F\) равным нулю.
Напишите программу, которая перебирает целые числа, большие \(850~000\), в порядке возрастания и ищет среди них такие, для которых значение \(F\) не равно нулю и делится нацело на \(7\). Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения \(F\).
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(F\).
Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(105\) \(F = 35-3=32\).

Решение:

Python


def min_divisor(n):
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1

k = 0
n = 850001

while k < 6:
    md = min_divisor(n)
    if md > 1:
        F = n // md - md
        if F and F % 7 == 0:
            print(n, F)
            k += 1
    n += 1

Ответ:
\(850003\) \(121422\)
\(850005\) \(283332\)
\(850014\) \(425005\)
\(850028\) \(425012\)
\(850042\) \(425019\)
\(850047\) \(283346\)

2023-8

Пусть \(M\) — разность максимального и минимального делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю.
Напишите программу, которая перебирает целые числа, меньшие \(800~000\), в порядке убывания и ищет среди них такие, для которых значение \(M\) кратно \(23\) (нуль числу \(23\) не кратен). Вывести первые пять найденных чисел и соответствующие им значения \(M\).
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(M\).
Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(20\) \(M = 10-2=8\).

Решение:

Python


def min_divisor(n):
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1

k = 0
n = 799999

while k < 5:
    md = min_divisor(n)
    if md > 1:
        M = n // md - md
        if M and M % 23 == 0:
            print(n, M)
            k += 1
    n -= 1

Ответ:
\(799995\) \(266662\)
\(799990\) \(399993\)
\(799987\) \(16974\)
\(799944\) \(399970\)
\(799907\) \(27554\)

2023-7

Пусть \(M\) — разность максимального и минимального делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю.
Напишите программу, которая перебирает целые числа, меньшие \(800~000\), в порядке убывания и ищет среди них такие, для которых значение \(M\) кратно \(17\) (нуль числу \(17\) не кратен). Вывести первые пять найденных чисел и соответствующие им значения \(M\).
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(M\).
Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(20\) \(M = 10-2=8\).

Решение:

Python


def min_divisor(n):
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1

k = 0
n = 799999

while k < 5:
    md = min_divisor(n)
    if md > 1:
        M = n // md - md
        if M and M % 17 == 0:
            print(n, M)
            k += 1
    n -= 1

Ответ:
\(799995\) \(266662\)
\(799990\) \(399993\)
\(799967\) \(114274\)
\(799956\) \(399976\)
\(799922\) \(399959\)

2023-6

Пусть \(M\) — разность максимального и минимального делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю.
Напишите программу, которая перебирает целые числа, большие \(860~000\), в порядке возрастания и ищет среди них такие, для которых значение \(M\) оканчивается на \(30\). Вывести первые пять найденных чисел и соответствующие им значения \(M\).
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(M\).
Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(20\) \(M = 10-2=8\).

Решение:

Python


def min_divisor(n):
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1

k = 0
n = 860001

while k < 5:
    md = min_divisor(n)
    if md > 1:
        M = n // md - md
        if M % 100 == 30:
            print(n, M)
            k += 1
    n += 1

Ответ:
\(860064\) \(430030\)
\(860199\) \(286730\)
\(860264\) \(430130\)
\(860464\) \(430230\)
\(860499\) \(286830\)

2023-5

Пусть \(M\) — разность максимального и минимального делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(M\) равным нулю.
Напишите программу, которая перебирает целые числа, большие \(860~000\), в порядке возрастания и ищет среди них такие, для которых значение \(M\) оканчивается на \(18\). Вывести первые пять найденных чисел и соответствующие им значения \(M\).
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(M\).
Строки выводятся в порядке возрастания найденных чисел.
Например, для числа \(20\) \(M = 10-2=8\).

Решение:

Python


def min_divisor(n):
    for x in range(2, int(n**0.5) + 1):
        if n % x == 0:
            return x
    return 1

k = 0
n = 860001

while k < 5:
    md = min_divisor(n)
    if md > 1:
        M = n // md - md
        if M % 100 == 18:
            print(n, M)
            k += 1
    n += 1

Ответ:
\(860040\) \(430018\)
\(860163\) \(286718\)
\(860219\) \(27718\)
\(860240\) \(430118\)
\(860440\) \(430218\)

Демо-2023

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300405\).

Среди натуральных чисел, не превышающих \(10^{10}\), найдите все числа, соответствующие маске \(1?2139*4\), делящиеся на \(2023\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на 2023. Количество строк в таблице для ответа избыточно.

Решение:

Python


for p in range(4):
    for b in range(10):
        for n in range(10**p):
            t = 10**(p+6) + b*10**(p+5) + 2139*10**(p+1) + n * 10 + 4
            if not t % 2023:
                print(t, t // 2023)

Ответ:
\(162139404 \quad 80148\)
\(1321399324 \quad 653188\)
\(1421396214 \quad 702618\)
\(1521393104 \quad 752048\)

ЕГЭ-2022. 1 вариант

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины;
в том числе «*» может задавать и пустую последовательность. Например, маске \(123*4\,?\,5\) соответствуют числа \(123405\) и \(12300405\).

Среди натуральных чисел, не превышающих \(10^8\), найдите все числа, соответствующие маске \(1234*7\), делящиеся на \(141\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на \(141\).

Количество строк в таблице для ответа избыточно.

Решение:

Python


for i in range(4):
    for k in range(10**i):
        n = 1234 * 10**(i+1) + k * 10 + 7
        if n % 141 == 0:
            print(n, n // 141)

Ответ:

1234737 8757
12341307 87527
12342717 87537
12344127 87547
12345537 87557
12346947 87567
12348357 87577
12349767 87587

Досрочный экзамен 2022

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

Среди натуральных чисел, не превышающих \(10^9\), найдите все числа, соответствующие маске \(12345?6?8\) и делящиеся на \(17\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им частные от деления на \(17\).

Решение:

Python


for i in range(10):
    for k in range(10):
        d = int(f'12345{i}6{k}8')
        if d % 17 == 0:
            print(d, d // 17)

Ответ:
\(123450668\)   \(7261804\)
\(123451688\)   \(7261864\)
\(123456618\)   \(7262154\)
\(123457638\)   \(7262214\)
\(123458658\)   \(7262274\)
\(123459678\)   \(7262334\)

2022-20

Пусть \(S\) — сумма различных натуральных делителей целого числа, являющихся простыми числами, не считая самого числа.
Напишите программу, которая перебирает целые числа, большие \( 650~000\), в порядке возрастания и ищет среди них такие, для которых значение \(S\) не равно нулю и делится нацело на \(11\). Программа должна найти и вывести первые \(5\) таких чисел и соответствующие им значения \(S\) .
Формат вывода: для каждого из \(5\) таких найденных чисел в отдельной строке сначала выводится само число, затем значение \(S\). Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(20\) \(S=2+5=7\).

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    if n == 2 or n == 3:
        return True
    if n > 3:
        for i in range(2, int(n**0.5) + 1):
            if n % i == 0:
                return False
        return True

def S(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            if is_prime(i):
                divisors.add(i)
            if is_prime(n//i):
                divisors.add(n//i)
    return sum(divisors) if divisors else 0

c = 0
n = 650001

while c < 5:
    s = S(n)
    if s and s % 11 == 0:
        print(n, s)
        c += 1
    n += 1

Ответ:
650003    561
650006    1639
650007    72226
650024    616
650030    65010

2022-19

Пусть \(S\) — сумма различных натуральных делителей целого числа, являющихся простыми числами, не считая самого числа.
Напишите программу, которая перебирает целые числа, большие \( 650~000\), в порядке возрастания и ищет среди них такие, для которых значение \(S\) оканчивается на цифру \(5\). Программа должна найти и вывести первые \(5\) таких чисел и соответствующие им значения \(S\) .
Формат вывода: для каждого из \(5\) таких найденных чисел в отдельной строке сначала выводится само число, затем значение \(S\). Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(20\) \(S=2+5=7\).

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    if n == 2 or n == 3:
        return True
    if n > 3:
        for i in range(2, int(n**0.5) + 1):
            if n % i == 0:
                return False
        return True

def S(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            if is_prime(i):
                divisors.add(i)
            if is_prime(n//i):
                divisors.add(n//i)
    return sum(divisors) if divisors else 0

c = 0
n = 650001

while c < 5:
    s = S(n)
    if s % 10 == 5:
        print(n, s)
        c += 1
    n += 1

Ответ:
650025    115
650026    1125
650028    2875
650031    5085
650046    6395

2022-18

Пусть \(S\) — сумма различных натуральных делителей целого числа, являющихся простыми числами, не считая самого числа.
Напишите программу, которая перебирает целые числа, большие \( 650~000\), в порядке возрастания и ищет среди них такие, для которых значение \(S\) оканчивается на цифру \(4\). Программа должна найти и вывести первые \(5\) таких чисел и соответствующие им значения \(S\) .
Формат вывода: для каждого из \(5\) таких найденных чисел в отдельной строке сначала выводится само число, затем значение \(S\). Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(20\) \(S=2+5=7\).

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    if n == 2 or n == 3:
        return True
    if n > 3:
        for i in range(2, int(n**0.5) + 1):
            if n % i == 0:
                return False
        return True

def S(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            if is_prime(i):
                divisors.add(i)
            if is_prime(n//i):
                divisors.add(n//i)
    return sum(divisors) if divisors else 0

c = 0
n = 650001

while c < 5:
    s = S(n)
    if s % 10 == 4:
        print(n, s)
        c += 1
    n += 1

Ответ:
650008    2654
650013    2404
650023    59104
650029    38254
650033    6414

2022-17

Пусть \(S\) — сумма различных натуральных делителей целого числа, являющихся простыми числами, не считая самого числа.
Напишите программу, которая перебирает целые числа, большие \( 650~000\), в порядке возрастания и ищет среди них такие, для которых значение \(S\) оканчивается на цифру \(3\). Программа должна найти и вывести первые \(5\) таких чисел и соответствующие им значения \(S\) .
Формат вывода: для каждого из \(5\) таких найденных чисел в отдельной строке сначала выводится само число, затем значение \(S\). Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(20\) \(S=2+5=7\).

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    if n == 2 or n == 3:
        return True
    if n > 3:
        for i in range(2, int(n**0.5) + 1):
            if n % i == 0:
                return False
        return True

def S(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            if is_prime(i):
                divisors.add(i)
            if is_prime(n//i):
                divisors.add(n//i)
    return sum(divisors) if divisors else 0

c = 0
n = 650001

while c < 5:
    s = S(n)
    if s % 10 == 3:
        print(n, s)
        c += 1
    n += 1

Ответ:
650002    325003
650016    103
650022    963
650042    325023
650067    19713

2022-16

Пусть \(S\) — сумма различных натуральных делителей целого числа, являющихся простыми числами, не считая самого числа.
Напишите программу, которая перебирает целые числа, большие \( 550~000\), в порядке возрастания и ищет среди них такие, для которых значение \(S\) оканчивается на цифру \(7\). Программа должна найти и вывести первые \(5\) таких чисел и соответствующие им значения \(S\) .
Формат вывода: для каждого из \(5\) таких найденных чисел в отдельной строке сначала выводится само число, затем значение \(S\). Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(20\) \(S=2+5=7\).

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    if n == 2 or n == 3:
        return True
    if n > 3:
        for i in range(2, int(n**0.5) + 1):
            if n % i == 0:
                return False
        return True

def S(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            if is_prime(i):
                divisors.add(i)
            if is_prime(n//i):
                divisors.add(n//i)
    return sum(divisors) if divisors else 0

c = 0
n = 550001

while c < 5:
    s = S(n)
    if s % 10 == 7:
        print(n, s)
        c += 1
    n += 1

Ответ:
550018    2337
550059    1197
550087    257
550099    1217
550137    117

2022-15

Пусть \(S\) — сумма различных натуральных делителей целого числа, являющихся простыми числами, не считая самого числа.
Напишите программу, которая перебирает целые числа, большие \( 550~000\), в порядке возрастания и ищет среди них такие, для которых значение \(S\) оканчивается на цифру \(1\). Программа должна найти и вывести первые \(5\) таких чисел и соответствующие им значения \(S\) .
Формат вывода: для каждого из \(5\) таких найденных чисел в отдельной строке сначала выводится само число, затем значение \(S\). Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(20\) \(S=2+5=7\).

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    if n == 2 or n == 3:
        return True
    if n > 3:
        for i in range(2, int(n**0.5) + 1):
            if n % i == 0:
                return False
        return True

def S(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            if is_prime(i):
                divisors.add(i)
            if is_prime(n//i):
                divisors.add(n//i)
    return sum(divisors) if divisors else 0

c = 0
n = 550001

while c < 5:
    s = S(n)
    if s % 10 == 1:
        print(n, s)
        c += 1
    n += 1

Ответ:
550023    1461
550025    461
550030    4251
550043    1501
550045    4811

2022-14

Напишите программу, которая перебирает целые числа, большие \( 750~000\), в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения упомянутых делителей.
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(105\) наибольший натуральный делитель \(35\) не является простым, для числа \(15\) наибольший натуральный делитель \(5\) — простое число, а для числа \(13\) такого делителя не существует.

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    if n == 2 or n == 3:
        return True
    if n > 3:
        for i in range(2, int(n**0.5) + 1):
            if n % i == 0:
                return False
        return True

def max_d_is_prime(n):
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return is_prime(n//i), n, n // i
    return True, n, n

c = 0
n = 750001
while c < 6:
    t = max_d_is_prime(n)
    if not t[0]:
        print(t[1], t[2])
        c += 1
    n += 1

Ответ:
750001    107143
750002    375001
750003    250001
750004    375002
750006    375003
750008    375004

2022-13

Напишите программу, которая перебирает целые числа, большие \( 650~000\), в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения упомянутых делителей.
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(105\) наибольший натуральный делитель \(35\) не является простым, для числа \(15\) наибольший натуральный делитель \(5\) — простое число, а для числа \(13\) такого делителя не существует.

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    if n == 2 or n == 3:
        return True
    if n > 3:
        for i in range(2, int(n**0.5) + 1):
            if n % i == 0:
                return False
        return True

def max_d_is_prime(n):
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return is_prime(n//i), n, n // i
    return True, n, n

c = 0
n = 650001
while c < 6:
    t = max_d_is_prime(n)
    if not t[0]:
        print(t[1], t[2])
        c += 1
    n += 1

Ответ:
650001    216667
650003    28261
650004    325002
650005    130001
650006    325003
650007    216669

2022-12

Напишите программу, которая перебирает целые числа, большие \( 350~000\), в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения упомянутых делителей.
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(105\) наибольший натуральный делитель \(35\) не является простым, для числа \(15\) наибольший натуральный делитель \(5\) — простое число, а для числа \(13\) такого делителя не существует.

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    if n == 2 or n == 3:
        return True
    if n > 3:
        for i in range(2, int(n**0.5) + 1):
            if n % i == 0:
                return False
        return True

def max_d_is_prime(n):
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return is_prime(n//i), n, n // i
    return True, n, n

c = 0
n = 350001
while c < 6:
    t = max_d_is_prime(n)
    if not t[0]:
        print(t[1], t[2])
        c += 1
    n += 1

Ответ:
350001    116667
350002    175001
350004    175002
350007    116669
350008    175004
350009    31819

2022-11

Напишите программу, которая перебирает целые числа, большие \( 450~000\), в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения упомянутых делителей.
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(105\) наибольший натуральный делитель \(35\) не является простым, для числа \(15\) наибольший натуральный делитель \(5\) — простое число, а для числа \(13\) такого делителя не существует.

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    if n == 2 or n == 3:
        return True
    if n > 3:
        for i in range(2, int(n**0.5) + 1):
            if n % i == 0:
                return False
        return True

def max_d_is_prime(n):
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return is_prime(n//i), n, n // i
    return True, n, n

c = 0
n = 450001
while c < 6:
    t = max_d_is_prime(n)
    if not t[0]:
        print(t[1], t[2])
        c += 1
    n += 1

Ответ:
450002    225001
450004    225002
450006    225003
450007    26471
450008    225004
450009    150003

2022-10

Напишите программу, которая перебирает целые числа, большие \( 550~000\), в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. Программа должна найти и вывести первые \(6\) таких чисел и соответствующие им значения упомянутых делителей.
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(105\) наибольший натуральный делитель \(35\) не является простым, для числа \(15\) наибольший натуральный делитель \(5\) — простое число, а для числа \(13\) такого делителя не существует.

Решение:

Python


def is_prime(n):
    if n == 1:
        return False
    if n == 2 or n == 3:
        return True
    if n > 3:
        for i in range(2, int(n**0.5) + 1):
            if n % i == 0:
                return False
        return True

def max_d_is_prime(n):
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return is_prime(n//i), n, n // i
    return True, n, n

c = 0
n = 550001
while c < 6:
    t = max_d_is_prime(n)
    if not t[0]:
        print(t[1], t[2])
        c += 1
    n += 1

Ответ:
550002    275001
550004    275002
550005    183335
550008    275004
550010    275005
550011    183337

2022-9

Пусть \(F\) — разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(F\) равным нулю.

Напишите программу, которая перебирает целые числа, большие \( 850~000\), в порядке возрастания и ищет среди них такие, для которых значение \(F\) не равно нулю и делится нацело на \(13\). Программа должна найти и вывести первые \(6\) найденных чисел и соответствующие им значения \(F\).
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(F\).
Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(105\) \(F = 35 - 3 = 32\).

Решение:

Python


def F(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
    if divisors:
        return max(divisors) - min(divisors)
    else:
        return 0

c = 0
i = 850001
while c < 6:
    m = F(i)
    if m and m % 13 == 0:
        print(i, m)
        c += 1
    i += 1

Ответ: 850022    425009
850048    425022
850053    283348
850074    425035
850099    7410
850100    425048

2022-8

Пусть \(F\) — разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(F\) равным нулю.

Напишите программу, которая перебирает целые числа, большие \( 850~000\), в порядке возрастания и ищет среди них такие, для которых значение \(F\) не равно нулю и делится нацело на \(11\). Программа должна найти и вывести первые \(6\) найденных чисел и соответствующие им значения \(F\).
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(F\).
Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(105\) \(F = 35 - 3 = 32\).

Решение:

Python


def F(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
    if divisors:
        return max(divisors) - min(divisors)
    else:
        return 0

c = 0
i = 850001
while c < 6:
    m = F(i)
    if m and m % 11 == 0:
        print(i, m)
        c += 1
    i += 1

Ответ:
850018    425007
850019    29282
850023    283338
850040    425018
850062    425029
850084    425040

2022-7

Пусть \(F\) — разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(F\) равным нулю.

Напишите программу, которая перебирает целые числа, большие \( 850~000\), в порядке возрастания и ищет среди них такие, для которых значение \(F\) не равно нулю и делится нацело на \(3\). Программа должна найти и вывести первые \(6\) найденных чисел и соответствующие им значения \(F\).
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(F\).
Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(105\) \(F = 35 - 3 = 32\).

Решение:

Python


def F(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
    if divisors:
        return max(divisors) - min(divisors)
    else:
        return 0

c = 0
i = 850001
while c < 6:
    m = F(i)
    if m and m % 3 == 0:
        print(i, m)
        c += 1
    i += 1

Ответ:
850003    121422
850005    283332
850006    425001
850012    425004
850015    169998
850018    425007

2022-6

Пусть \(F\) — разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(F\) равным нулю.

Напишите программу, которая перебирает целые числа, большие \( 850~000\), в порядке возрастания и ищет среди них такие, для которых значение \(F\) не равно нулю и делится нацело на \(5\). Программа должна найти и вывести первые \(6\) найденных чисел и соответствующие им значения \(F\).
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(F\).
Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(105\) \(F = 35 - 3 = 32\).

Решение:

Python


def F(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
    if divisors:
        return max(divisors) - min(divisors)
    else:
        return 0

c = 0
i = 850001
while c < 6:
    m = F(i)
    if m and m % 5 == 0:
        print(i, m)
        c += 1
    i += 1

Ответ:
850004    425000
850014    425005
850024    425010
850025    170000
850029    283340
850034    425015

2022-5

Пусть \(F\) — разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение \(F\) равным нулю.

Напишите программу, которая перебирает целые числа, большие \( 850~000\), в порядке возрастания и ищет среди них такие, для которых значение \(F\) не равно нулю и делится нацело на \(7\). Программа должна найти и вывести первые \(6\) найденных чисел и соответствующие им значения \(F\).
Формат вывода: для каждого из \(6\) таких найденных чисел в отдельной строке сначала выводится само число, затем — значение \(F\).
Строки выводятся в порядке возрастания найденных чисел.

Например, для числа \(105\) \(F = 35 - 3 = 32\).

Решение:

Python


def F(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            divisors.add(i)
            divisors.add(n//i)
    if divisors:
        return max(divisors) - min(divisors)
    else:
        return 0

c = 0
i = 850001
while c < 6:
    m = F(i)
    if m and m % 7 == 0:
        print(i, m)
        c += 1
    i += 1

Ответ:
850003    121422
850005    283332
850014    425005
850028    425012
850042    425019
850047    283346

Фоксфорд-1

Рассматривается множество целых чисел, принадлежащих числовому отрезку \( [ 100000; \,\, 200000]\). Найдите максимальное число, которое имеет максимальное количество простых делителей. В ответе запишите через пробел сначала максимальное число, затем количество его простых делителей.

Решение:

...
Ответ: \(199290\)    \(6\)

1

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

Решение:

Python


def is_prime(n):
    if (n == 2) or (n == 3):
        return True
    i = 2
    while i ** 2 <= n:
        if n % i == 0:
            return False
        i += 1
    return True

for i in range(300, 351):
    if is_prime(i):
        print(i)

Go


package main

import "fmt"

func isPrime(n int) bool  {
	if n == 2 || n == 3 {
		return true
	}
	for i := 2; i * i <= n; i++ {
		if n % i == 0 {
			return false
		}
	}
	return true
}

func main()  {
	for i := 300; i < 351; i++ {
		if isPrime(i) {
			fmt.Println(i)
		}
	}
}

C++


#include <iostream>

using namespace std;

bool is_prime(int n) {
	if (n == 2 || n == 3)
		return true;
	for (int i = 2; i * i <= n; i++)
		if (n % i == 0)
			return false;
	return true;
}

int main() {

    for (int i = 300; i < 351; i++)
    	if(is_prime(i))
    		cout << i << endl;

    return 0;
}

Java


public class z25n1 {

	public static boolean is_prime(int n) {
		if (n == 2 || n == 3)
			return true;
		for (int i = 2; i * i <= n; i++)
			if (n % i == 0)
				return false;
		return true;
	}

	public static void main(String[] args) {
		for (int i = 300; i < 351; i++)
		    if (is_prime(i))
		    	System.out.println(i);
	}
}

Демо 2021

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

Решение:

Python


def search_div(n):
    divisors = set()
    for i in range(2, int(n**0.5)+1):
        if not n % i:
            divisors.add(i)
            divisors.add(n//i)
        if len(divisors) > 2:
            break
    return divisors

for i in range(174457, 174506):
    d = [*search_div(i)]
    if len(d) == 2:
        d.sort()
        print(*d)

Ответ:
3   58153
7   24923
59   2957
13   13421
149   1171
5   34897
211   827
2   87251