Подготовка к школе
1 класс
2 класс
3 класс
4 класс
5 класс
6 класс
7 класс
8 класс
9 класс
10 класс
11 класс
ОГЭ
ЕГЭ
Для всех
Назад

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

Сообщить о проблеме
1. Задание #295963
Задание было решено верно
Задание было решено неверно

Пусть $R$ – сумма различных натуральных делителей целого числа, не считая единицы и самого числа.

Напишите программу, которая перебирает целые числа, большие $500,000$, в порядке возрастания и ищет среди них такие, для которых $R$ оканчивается на цифру $7$.

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

Например, для числа $20$ $R=2+4+5+10=21$.








Будем последовательно перебирать числа, начиная с $500,001$. Для каждого числа найдём все делители, кроме $1$ и самого числа, и вычислим их сумму $R$.

Делители достаточно искать до $\sqrt n$: если $d$ является делителем числа $n$, то вторым делителем пары будет $\dfrac{n}{d}$.

def f(n):
    s = 0
    d = 2

    while d * d <= n:
        if n % d == 0:
            s += d
            if d != n // d:
                s += n // d
        d += 1

    return s


n = 500001
k = 0

while k < 5:
    r = f(n)

    if r % 10 == 7:
        print(n, r)
        k += 1

    n += 1

Функция f(n) вычисляет сумму $R$ всех различных делителей числа $n$, кроме $1$ и самого числа.

Условие r % 10 == 7 проверяет, что значение $R$ оканчивается на цифру $7$.

Программа выведет:

Число$R$
$500002$$273007$
$500006$$307737$
$500016$$910607$
$500022$$583397$
$500042$$289557$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
2. Задание #295967
Задание было решено верно
Задание было решено неверно

Пусть $R$ – сумма всех различных натуральных делителей целого числа.

Напишите программу, которая перебирает целые числа, большие $500,000$, в порядке возрастания и ищет среди них такие, для которых значение $R$ оканчивается на цифру $6$. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – пять соответствующих этим числам значений $R$.

Например, для числа $20$ $R=1+2+4+5+10+20=42$.








Будем перебирать числа, начиная с $500,001$. Для каждого числа найдём сумму всех его натуральных делителей.

Делители достаточно искать до $\sqrt n$: если $d$ является делителем числа $n$, то вместе с ним существует парный делитель $\dfrac{n}{d}$.

def f(n):
    s = 0

    for d in range(1, int(n ** 0.5) + 1):
        if n % d == 0:
            s += d

            if d != n // d:
                s += n // d

    return s


n = 500001
k = 0

while k < 5:
    r = f(n)

    if r % 10 == 6:
        print(n, r)
        k += 1

    n += 1

Функция f(n) вычисляет сумму $R$ всех различных натуральных делителей числа $n$.

Условие r % 10 == 6 проверяет, что значение $R$ оканчивается на цифру $6$.

Программа выведет:

Число$R$
$500032$$1070356$
$500035$$606816$
$500039$$501456$
$500050$$949716$
$500052$$1333696$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
3. Задание #295969
Задание было решено верно
Задание было решено неверно

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

Напишите программу, которая перебирает целые числа, большие $452,021$, в порядке возрастания и ищет среди них такие, для которых значение $M$ при делении на $7$ даёт в остатке $3$. Вывести первые $5$ найденных чисел и соответствующие им значения $M$.

Формат вывода: для каждого из $5$ таких найденных чисел в отдельной строке сначала выводится само число, затем – значение $M$. Строки выводятся в порядке возрастания найденных чисел.

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








Для каждого числа найдём его минимальный делитель $d$, не равный $1$. Тогда максимальный делитель, не равный самому числу, равен $\dfrac{n}{d}$.

Поэтому: $M=d+\dfrac{n}{d}$. Если делителей нет, число простое и $M=0$.

from math import isqrt

def f(n):
    for d in range(2, isqrt(n) + 1):
        if n % d == 0:
            return d + n // d
    return 0


n = 452022
k = 0

while k < 5:
    m = f(n)

    if m % 7 == 3:
        print(n, m)
        k += 1

    n += 1

Функция f(n) находит минимальный делитель числа $n$. Парный ему делитель $n//d$ будет максимальным собственным делителем числа.

Условие m % 7 == 3 проверяет, что значение $M$ при делении на $7$ даёт остаток $3$.

Программа выведет:

Число$M$
$452025$$150678$
$452029$$23810$
$452034$$226019$
$452048$$226026$
$452062$$226033$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
4. Задание #295968
Задание было решено верно
Задание было решено неверно

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

Напишите программу, которая перебирает целые числа, больше $700,000$, в порядке возрастания и ищет среди них такие, для которых значение $M$ оканчивается на $8$. Вывести первые пять найденных чисел и соответствующие им значения $M$.

Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем – значение $M$.

Строки выводятся в порядке возрастания найденных чисел. Например, для числа $20$ $M=2+10=12$.








Для каждого числа найдём его минимальный делитель $d$, не равный $1$. Тогда максимальный делитель, не равный самому числу, равен $\dfrac{n}{d}$.

Поэтому: $M=d+\dfrac{n}{d}$. Если делителей нет, число простое и $M=0$.

from math import isqrt

def f(n):
    for d in range(2, isqrt(n) + 1):
        if n % d == 0:
            return d + n // d
    return 0


n = 700001
k = 0

while k < 5:
    m = f(n)

    if m % 10 == 8:
        print(n, m)
        k += 1

    n += 1

Функция f(n) находит минимальный делитель числа $n$. Парный ему делитель n // d будет максимальным собственным делителем числа.

Условие m % 10 == 8 проверяет, что значение $M$ оканчивается на цифру $8$.

Программа выведет:

Число$M$
$700005$$233338$
$700007$$100008$
$700012$$350008$
$700015$$140008$
$700031$$24168$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
5. Задание #295972
Задание было решено верно
Задание было решено неверно

Напишите программу, которая перебирает целые числа, большие $500,000$, в порядке возрастания и ищет среди них такие, у которых есть натуральный делитель, оканчивающийся на цифру $9$ и не равный ни самому числу, ни числу $9$.

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








Для каждого числа найдём все его делители. Достаточно перебирать делители до $\sqrt n$: если $d$ является делителем числа $n$, то вторым делителем пары будет $\dfrac{n}{d}$.

Среди подходящих делителей выбираем минимальный, который оканчивается на $9$, не равен $9$ и не равен самому числу.

from math import isqrt

def f(n):
    a = []

    for d in range(1, isqrt(n) + 1):
        if n % d == 0:
            if d % 10 == 9 and d != 9 and d != n:
                a.append(d)

            k = n // d
            if k % 10 == 9 and k != 9 and k != n:
                a.append(k)

    if a:
        return min(a)
    return 0


n = 500001
k = 0

while k < 5:
    d = f(n)

    if d != 0:
        print(n, d)
        k += 1

    n += 1

Функция f(n) находит минимальный натуральный делитель числа $n$, который оканчивается на цифру $9$, но не равен $9$ и самому числу.

Если подходящих делителей нет, функция возвращает $0$.

Программа выведет:

ЧислоМинимальный делитель
$500002$$89$
$500003$$71429$
$500004$$19$
$500007$$166669$
$500013$$18519$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
6. Задание #295974
Задание было решено верно
Задание было решено неверно

Пусть $M$ – сумма минимального и максимального простых натуральных делителей целого числа, не считая самого числа. Если таких делителей у числа нет, то значение $M$ считается равным нулю. Напишите программу, которая перебирает целые числа, большие $8,007,524,668$, в порядке возрастания и ищет среди них такие, для которых $M$ больше $110,000$, является простым числом и в своём написании содержит последовательность цифр $991$ ровно один раз.

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

Например, для числа $49$ $M=14$; для числа $42$ $M=9$.








Так как $M$ должно быть простым числом больше $110,000$, оно нечётное. Если исходное число нечётное, его минимальный и максимальный простые делители также нечётные, поэтому их сумма будет чётной. Значит, подходящее число обязательно чётное.

Следовательно, минимальный простой делитель равен $2$, и $M=2+\text{максимальный простой делитель}$.

Будем перебирать только чётные числа и находить их максимальный простой делитель.

def prime(n):
    if n < 2:
        return False
    if n % 2 == 0:
        return n == 2

    d = 3
    while d * d <= n:
        if n % d == 0:
            return False
        d += 2

    return True


def max_div(n):
    m = 0

    while n % 2 == 0:
        m = 2
        n //= 2

    d = 3
    while d * d <= n:
        while n % d == 0:
            m = d
            n //= d
        d += 2

    if n > 1:
        m = max(m, n)

    return m


n = 8007524670
k = 0

while k < 5:
    d = max_div(n)
    M = 2 + d

    if M > 110000 and prime(M) and str(M).count('991') == 1:
        print(n, M)
        k += 1

    n += 2

Функция max_div(n) находит максимальный простой делитель числа $n$.

Условие str(M).count(‘991’) == 1 проверяет, что последовательность цифр $991$ встречается в записи числа $M$ ровно один раз.

Программа выведет:

Число$M$
$8007539144$$149911$
$8007540788$$153991171$
$8007540856$$142991803$
$8007547448$$9910333$
$8007550626$$150991$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
7. Задание #295976
Задание было решено верно
Задание было решено неверно

Напишите программу, которая перебирает целые числа, большие $2,626,695,891$, в порядке возрастания и ищет среди них числа, представимые в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых ровно один раз содержит в своей записи $67$ ($67$ – идущие подряд друг за другом в указанном порядке цифры $6$ и $7$).

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








Если число представимо в виде произведения двух простых множителей $p\cdot q$, то достаточно найти его первый делитель $p$. Он будет простым. После этого проверяем, что $q=\dfrac{n}{p}$ тоже является простым числом и оба множителя содержат последовательность 67 ровно один раз.

from math import isqrt

def prime(n):
    if n < 2:
        return False
    for d in range(2, isqrt(n) + 1):
        if n % d == 0:
            return False
    return True


def f(n):
    for d in range(2, isqrt(n) + 1):
        if n % d == 0:
            q = n // d

            if (prime(q) and
                str(d).count('67') == 1 and
                str(q).count('67') == 1):
                return d

            return 0

    return 0


n = 2626695892
k = 0

while k < 5:
    d = f(n)

    if d != 0:
        print(n, d)
        k += 1

    n += 1

Функция f(n) находит первый делитель числа $n$. Если второй множитель тоже прост и в записи каждого множителя последовательность 67 встречается ровно один раз, функция возвращает меньший множитель.

Программа выведет:

ЧислоНаименьший множитель
$2626696861$$6793$
$2626700987$$1567$
$2626704089$$167$
$2626711691$$2267$
$2626713493$$67$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
8. Задание #295979
Задание было решено верно
Задание было решено неверно

Пусть $M$ – сумма минимального и максимального простых натуральных делителей целого числа, не считая самого числа. Если таких делителей у числа нет, то значение $M$ считается равным нулю. Напишите программу, которая перебирает целые числа, большие $8,007,494,154$, в порядке возрастания и ищет среди них такие, для которых $M$ больше $80,000$, является простым числом и в своём написании содержит последовательность цифр $567$ ($567$ – идущие подряд друг за другом в указанном порядке цифры $5$, $6$ и $7$) ровно один раз.

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

Например, для числа $49$ $M=14$; для числа $42$ $M=9$.








Если исходное число нечётное, то его минимальный и максимальный простые делители нечётные. Их сумма $M$ будет чётной. Так как $M>80,000$ и должно быть простым, такие числа нам не подходят.

Значит, перебираем только чётные числа. Для них минимальный простой делитель равен $2$, поэтому $M=2+\text{максимальный простой делитель}$.

from math import isqrt

def prime(n):
    if n < 2:
        return False
    for d in range(2, isqrt(n) + 1):
        if n % d == 0:
            return False
    return True


def max_div(n):
    m = 2

    while n % 2 == 0:
        n //= 2

    d = 3
    while d * d <= n:
        if n % d == 0:
            m = d
            while n % d == 0:
                n //= d
        d += 2

    if n > 1:
        m = max(m, n)

    return m


n = 8007494156
k = 0

while k < 5:
    M = 2 + max_div(n)

    if M > 80000 and str(M).count('567') == 1 and prime(M):
        print(n, M)
        k += 1

    n += 2

Функция max_div(n) находит максимальный простой делитель числа $n$.

Условие str(M).count(‘567’) == 1 проверяет, что последовательность цифр $567$ встречается в записи $M$ ровно один раз.

Программа выведет:

Число$M$
$8007495062$$615679$
$8007495772$$5671033$
$8007531302$$856789$
$8007532410$$5679103$
$8007559070$$1567039$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
9. Задание #295980
Задание было решено верно
Задание было решено неверно

Напишите программу, которая перебирает целые числа, большие $600,000$, в порядке возрастания и ищет среди них такие, у которых есть натуральный делитель, оканчивающийся на цифру $9$ и не равный ни самому числу, ни числу $9$. Вывести первые пять найденных чисел и для каждого минимальный делитель, оканчивающийся на цифру $9$, не равный ни самому числу, ни числу $9$.

Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем – значение наименьшего делителя, оканчивающегося на цифру $9$, не равного ни самому числу, ни числу $9$.

Строки выводятся в порядке возрастания найденных чисел.








Для каждого числа найдём все пары делителей. Достаточно перебирать делители до $\sqrt n$: если $d$ делит число $n$, то второй делитель пары равен $\dfrac{n}{d}$.

Среди всех подходящих делителей выбираем минимальный, который оканчивается на цифру $9$ и не равен $9$ и самому числу.

from math import isqrt

def f(n):
    a = []

    for d in range(1, isqrt(n) + 1):
        if n % d == 0:
            if d % 10 == 9 and d != 9 and d != n:
                a.append(d)

            k = n // d
            if k % 10 == 9 and k != 9 and k != n:
                a.append(k)

    if a:
        return min(a)
    return 0


n = 600001
k = 0

while k < 5:
    d = f(n)

    if d != 0:
        print(n, d)
        k += 1

    n += 1

Функция f(n) находит минимальный натуральный делитель числа $n$, который оканчивается на цифру $9$, но не равен $9$ и самому числу.

Если подходящих делителей нет, функция возвращает $0$.

Программа выведет:

ЧислоМинимальный делитель
$600001$$19$
$600003$$409$
$600005$$49$
$600007$$7229$
$600008$$179$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
10. Задание #295983
Задание было решено верно
Задание было решено неверно

Напишите программу, которая перебирает целые числа, большие $2,018,974,447$, в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых ровно один раз содержит в своей записи $43$ ($43$ – идущие подряд друг за другом в указанном порядке цифры $4$ и $3$).

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








Если число имеет вид $n=p\cdot q$, где $p$ и $q$ — простые числа, то достаточно найти наименьший делитель $p$. После этого проверяем, что второй множитель $q=\dfrac{n}{p}$ тоже является простым числом и каждый из множителей содержит 43 ровно один раз.

from math import isqrt

def prime(n):
    if n < 2:
        return False
    if n % 2 == 0:
        return n == 2

    for d in range(3, isqrt(n) + 1, 2):
        if n % d == 0:
            return False

    return True


def f(n):
    if n % 2 == 0:
        p = 2
    else:
        p = 0

        for d in range(3, isqrt(n) + 1, 2):
            if n % d == 0:
                p = d
                break

        if p == 0:
            return 0

    q = n // p

    if (str(p).count('43') == 1 and
        str(q).count('43') == 1 and
        prime(q)):
        return p

    return 0


n = 2018974448
k = 0

while k < 5:
    d = f(n)

    if d != 0:
        print(n, d)
        k += 1

    n += 1

Функция f(n) находит наименьший простой множитель числа $n$. Затем проверяется, что второй множитель тоже простой и последовательность 43 встречается в каждом множителе ровно один раз.

Программа выведет:

ЧислоНаименьший множитель
$2018977769$$27143$
$2018980091$$9437$
$2018983349$$643$
$2018997619$$43$
$2019003907$$4643$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
11. Задание #295985
Задание было решено верно
Задание было решено неверно

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

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

Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем – значение $M$.

Строки выводятся в порядке возрастания найденных чисел.

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








Для каждого числа найдём его минимальный делитель $d$, не равный $1$. Тогда максимальный делитель, не равный самому числу, равен $\dfrac{n}{d}$.

Поэтому: $M=d+\dfrac{n}{d}$. Если делителей нет, число простое и $M=0$.

from math import isqrt

def f(n):
    for d in range(2, isqrt(n) + 1):
        if n % d == 0:
            return d + n // d
    return 0


n = 800001
k = 0

while k < 5:
    m = f(n)

    if m % 10 == 6:
        print(n, m)
        k += 1

    n += 1

Функция f(n) находит минимальный делитель числа $n$. Парный ему делитель n // d является максимальным собственным делителем числа.

Условие m % 10 == 6 проверяет, что значение $M$ оканчивается на цифру $6$.

Программа выведет:

Число$M$
$800003$$47076$
$800005$$160006$
$800008$$400006$
$800019$$266676$
$800023$$114296$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
12. Задание #295989
Задание было решено верно
Задание было решено неверно

Напишите программу, которая перебирает целые числа, большие $600,000$, в порядке возрастания и ищет среди них такие, у которых есть натуральный делитель, оканчивающийся на цифру $8$ и не равный ни самому числу, ни числу $8$.

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








Для каждого числа найдём все пары делителей. Достаточно перебирать делители до $\sqrt n$: если $d$ является делителем числа $n$, то второй делитель пары равен $\dfrac{n}{d}$.

Среди всех подходящих делителей выбираем минимальный, который оканчивается на цифру $8$ и не равен $8$ и самому числу.

from math import isqrt

def f(n):
    a = []

    for d in range(1, isqrt(n) + 1):
        if n % d == 0:
            if d % 10 == 8 and d != 8 and d != n:
                a.append(d)

            k = n // d
            if k % 10 == 8 and k != 8 and k != n:
                a.append(k)

    if a:
        return min(a)
    return 0


n = 600001
k = 0

while k < 5:
    d = f(n)

    if d != 0:
        print(n, d)
        k += 1

    n += 1

Функция f(n) находит минимальный натуральный делитель числа $n$, который оканчивается на цифру $8$, но не равен $8$ и самому числу.

Если подходящих делителей нет, функция возвращает $0$.

Программа выведет:

ЧислоМинимальный делитель
$600008$$358$
$600010$$58$
$600012$$18$
$600016$$300008$
$600020$$38$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
13. Задание #295993
Задание было решено верно
Задание было решено неверно

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

Напишите программу, которая перебирает целые числа, большие $900,000$, в порядке возрастания и ищет среди них такие, для которых значение $M$ оканчивается на $8$. Программа должна найти и вывести первые пять таких чисел и соответствующие им значения $M$.

Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем – значение $M$.

Строки выводятся в порядке возрастания найденных чисел.

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








Для каждого числа найдём его минимальный делитель $d$, не равный $1$. Тогда максимальный делитель, не равный самому числу, равен $\dfrac{n}{d}$.

Поэтому: $M=d+\dfrac{n}{d}$. Если делителей нет, число простое и $M=0$.

from math import isqrt

def f(n):
    for d in range(2, isqrt(n) + 1):
        if n % d == 0:
            return d + n // d
    return 0


n = 900001
k = 0

while k < 5:
    m = f(n)

    if m % 10 == 8:
        print(n, m)
        k += 1

    n += 1

Функция f(n) находит минимальный делитель числа $n$. Парный ему делитель n // d является максимальным собственным делителем числа.

Условие m % 10 == 8 проверяет, что значение $M$ оканчивается на цифру $8$.

Программа выведет:

Число$M$
$900012$$450008$
$900015$$300008$
$900032$$450018$
$900041$$2358$
$900045$$300018$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
14. Задание #295994
Задание было решено верно
Задание было решено неверно

Пусть $R$ – сумма различных натуральных делителей целого числа, не считая единицы и самого числа.

Напишите программу, которая перебирает целые числа, большие $500,000$, в порядке возрастания и ищет среди них такие, для которых $R$ оканчивается на цифру $9$.

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

Например, для числа $20$ $R=2+4+5+10=21$.








Будем последовательно перебирать числа, начиная с $500,001$. Для каждого числа найдём все делители, кроме $1$ и самого числа, и вычислим их сумму $R$.

Делители достаточно искать до $\sqrt n$: если $d$ является делителем числа $n$, то вторым делителем пары будет $\dfrac{n}{d}$.

from math import isqrt

def f(n):
    s = 0

    for d in range(2, isqrt(n) + 1):
        if n % d == 0:
            s += d

            if d != n // d:
                s += n // d

    return s


n = 500001
k = 0

while k < 5:
    r = f(n)

    if r % 10 == 9:
        print(n, r)
        k += 1

    n += 1

Функция f(n) вычисляет сумму $R$ всех различных натуральных делителей числа $n$, кроме $1$ и самого числа.

Условие r % 10 == 9 проверяет, что значение $R$ оканчивается на цифру $9$.

Программа выведет:

Число$R$
$500014$$250009$
$500038$$495289$
$500040$$1170359$
$500054$$250029$
$500058$$667289$
Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
15. Задание #295998
Задание было решено верно
Задание было решено неверно

Пусть $R$ – сумма различных натуральных делителей целого числа, не считая единицы и самого числа.

Напишите программу, которая перебирает целые числа, большие $500,000$, в порядке возрастания и ищет среди них такие, для которых $R$ оканчивается на цифру $1$. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – соответствующее значение $R$ для каждого из них.

Например, для числа $20$ $R=2+4+5+10=21$.








Будем последовательно перебирать числа, начиная с $500,001$. Для каждого числа найдём все делители, кроме $1$ и самого числа, и вычислим их сумму $R$.

Делители достаточно искать до $\sqrt n$: если $d$ является делителем числа $n$, то вторым делителем пары будет $\dfrac{n}{d}$.

from math import isqrt

def f(n):
    s = 0

    for d in range(2, isqrt(n) + 1):
        if n % d == 0:
            s += d

            if d != n // d:
                s += n // d

    return s


n = 500001
k = 0

while k < 5:
    r = f(n)

    if r % 10 == 1:
        print(n, r)
        k += 1

    n += 1

Функция f(n) вычисляет сумму $R$ всех различных натуральных делителей числа $n$, кроме $1$ и самого числа.

Условие r % 10 == 1 проверяет, что значение $R$ оканчивается на цифру $1$.

Программа выведет:

Число$R$
$500008$$437521$
$500010$$872021$
$500018$$300261$
$500028$$666731$
$500078$$262521$
Показать
Очки опыта 20
Спросить Зави
03:50:00
Решено заданий: 0 из
0 заданий сегодня