Тема 25. Обработка целочисленной информации
25.02 Особые числа (простые, фибоначи, факториал, палиндромы)
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела обработка целочисленной информации
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#49389

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

Показать ответ и решение
def simple(x):# Функция,которая проверяет является число простым или нет
    return x > 1 and all(x % y for y in range(2,int(x**0.5)+1))
def divs(x):# Функция,которая возвращает делители определённого числа
    d = set()
    for i in range(2,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
ans = []
for x in range(173225,217438):
    d = [i for i in divs(x) if simple(i)] #В списке d будут храниться делители числа x,которые при этом являются простыми числами
    if len(d) == 2 and (d[0] % 10 == d[1] % 10) and d[0]*d[1] == x:
        ans += [x]
print(len(ans),min(ans))

Ответ: 1710173231

Ошибка.
Попробуйте повторить позже

Задача 2#63209

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

Показать ответ и решение
# Функция, проверяющая, является ли число простым
def is_prime(n):
    for i in range(2, int(n ** 0.5) + 1):
        # Если i делитель n, то n не простое
        if n % i == 0:
            return False  # Если нашли делитель, то число не простое

    # Если цикл завершился без прерывания, то у числа нет делителей, кроме 1 и самого числа
    return True  # Если не нашли делителей, то число простое


for i in range(2410000, 2410100 + 1):
    # Если число i простое, то выводим его
    if is_prime(i):
        print(i, end=’ ’)

Ответ: 2410027 2410043 2410081

Ошибка.
Попробуйте повторить позже

Задача 3#61235

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

Показать ответ и решение
# Функция для выявления простых чисел
def isSimple(n):
    for d in range(2, int(n**0.5)+1):
        if n % d == 0:
            return False
    return True

# Множество для подходящих чисел
nums = set()

# i и j — предполагаемые делители
for i in range(2, 100000):
    for j in range(i+1, 100000):
        # Если произведение уже выше дозволенного значения, то прерываем цикл
        if i*j > 178945:
            break
        # Здесь проверяем, не меньше ли произведение, чем левая грань отрезка
        if i*j >= 156367:
            if isSimple(i) and isSimple(j):
                nums.add(i*j)

print(len(nums), min(nums))

Ответ: 4931 156367

Ошибка.
Попробуйте повторить позже

Задача 4#61233

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [9080350; 9080445], простые числа. Выведите все найденные простые числа в порядке возрастания, слева от каждого из них выведите его номер по порядку, где число 9080350 имеет номер 1, число 9080351 номер 2.

Пример ввода ответа: № число № число ...

Показать ответ и решение
# Функция для выявления простых чисел
def isSimple(n):
    for d in range(2, int(n**0.5)+1):
        if n % d == 0:
            return False
    return True

n = 1 # Текущий номер числа
for i in range(9080350, 9080446):
    if isSimple(i):
        print(n, i)
    n += 1

Ответ: 22 9080371 32 9080381 38 9080387 64 9080413 68 9080417 92 9080441

Ошибка.
Попробуйте повторить позже

Задача 5#61003

Среди целых чисел, принадлежащих числовому отрезку [351627;428763], найдите числа, которые представляют собой произведение двух различных простых делителей. Запишите в ответе количество таких чисел и их среднее арифметическое. Для среднего арифметического запишите только целую часть числа.

Показать ответ и решение
# Функция для выявления простых чисел
def isSimple(n):
    for d in range(2, int(n**0.5)+1):
        if n % d == 0:
            return False
    return True

# Множество для подходящих чисел
nums = set()

# i и j содержат предполагаемые множители
for i in range(2, 250000):
    for j in range(i+1, 250000):
        # Если произведение уже выше дозволенного значения, то прерываем цикл
        if i*j > 428763:
            break
        # Здесь проверяем, не меньше ли произведение, чем левая грань отрезка
        if i*j >= 351627:
            if isSimple(i) and isSimple(j):
                nums.add(i*j)

print(len(nums), sum(nums)//len(nums))

Ответ: 16200 390088

Ошибка.
Попробуйте повторить позже

Задача 6#60998

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

Показать ответ и решение
mx = 0 # Макс. сумма
mxe = () # Элементы с макс. суммой
# Идём с самых больших чисел, чтобы быстрее найти пару с максимальной суммой
for i in range(22052, 13193, -1):
    d1 = set() # Делители первого числа
    for j in range(i-1, 13193, -1):
        # Если пара не больше текущего максимума, то рассматривать её нет смысла
        if i+j < mx:
            break
        f = 0
        d2 = set() # Делители второго числа
        for d in range(2, int(j**0.5)+1):
            # Если делители совпадают, то пропускаем пару
            if i % d == 0 and j % d == 0:
                f = 1
                break
            # Добавляем делители в множества
            if i % d == 0:
                d1.add(d)
                d1.add(i//d)
            if j % d == 0:
                d2.add(d)
                d2.add(j//d)
        # Если числа не имеют общих делителей и их по 4, то засчитываем
        if f == 0 and len(d1) == 4 and len(d2) == 4:
            if i+j > mx:
                mx = i+j
                mxe = (j, i)
                # Прерываем цикл, потому что дальше числа поменьше
                break

print(mxe)

Ответ: 22025 22028

Ошибка.
Попробуйте повторить позже

Задача 7#60994

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

Показать ответ и решение
for x in range(4301614, 4301718):
    f = 0 # Переменная-флаг, единица при наличии иных делителей, помимо простых
    # В цикл не входят единица и само число
    for d in range(2, int(x**0.5)+1):
        if x % d == 0:
            f = 1
            break
    if f == 0:
        print(x)

Ответ: 4301623 4301669 4301699 4301701 4301707

Ошибка.
Попробуйте повторить позже

Задача 8#58983

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

Показать ответ и решение
def simple(x):# Функция,которая проверяет является ли число простым или нет
    return x > 1 and all(x % y for y in range(2,int(x**0.5)+1))
def divs(x):# Функция,которая возвращает список делителей определённого числа
    d = set()
    for i in range(2,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
ans = []
for x in range(182635,453733+1):
    d = [i for i in divs(x) if simple(i)]#В списке d будут делители числа x,которые при этом являются простыми числами
    if len(d) == 2  and d[0]*d[1] == x:
        ans += [x]
print(len(ans),max(ans)+min(ans))

Ответ: 57221 636366

Ошибка.
Попробуйте повторить позже

Задача 9#58107

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [35131514; 214164125] минимальное расстояние между числом, являющимся факториалом какого-то числа, и числом Фибоначчи. В ответе запишите эти два числа соответственно (сначала число, которое является факториалом, а затем, число, которое является чилос Фибоначчи) через пробел.

Показать ответ и решение
from math import factorial
fact = []#Список ,в котором будут факториалы числа
for i in range(20):
    if factorial(i) >= 35131514 and factorial(i) <= 214164125:
        fact += [factorial(i)]
fibo = [0,1]
while fibo[-1] < 214164125:
    fibo += [fibo[-2]+fibo[-1]]
fibo = [x for x in fibo if x >= 35131514 and x <= 214164125] #Список, в котором будут только числа
# которые находятся в исследуемой области
ans = []
mn = 10**50
for first in fact:
    for second in fibo:
        if abs(first-second) < mn:
            ans += [(first,second)]#Записываем числа в список,если их разница меньше mn
            mn = abs(first-second) #Перезаписываем значение mn
print(ans)

Ответ: 39916800 39088169

Ошибка.
Попробуйте повторить позже

Задача 10#57996

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [907645; 907709], простые числа.

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

Показать ответ и решение
for i in range(907645, 907710):
    f = 0 # Переменная-флаг, означающая наличие делителей
    for d in range(2, int(i**0.5)+1):
        if i % d == 0:
            f = 1
            break
    if f == 0:
        print(i)

Ответ: 907651 907657 907663 907667 907691 907693 907703

Ошибка.
Попробуйте повторить позже

Задача 11#56462

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [235121; 1004523], числа Фибоначчи. В ответе запишите все такие найденные числа в порядке возрастания через пробел.

Показать ответ и решение
a = [0] * 100
a[1] = 1
for i in range(2, 100):
    a[i] = a[i - 1] + a[i - 2]
for i in range(len(a)):
    if a[i] >= 235121 and a[i] <= 1004523:
        print(a[i], end=’ ’)

Ответ: 317811 514229 832040

Ошибка.
Попробуйте повторить позже

Задача 12#54983

На отрезке [123123; 345345] найдите минимальное и максимальное простое число. В ответе запишите два этих числа в порядке возрастания через пробел.

Показать ответ и решение
def is_prime(number):
    if number == 1: return False
    for div in range(2, int(number ** 0.5) + 1):
        if number % div == 0:
            return False
    return True


maxim = 0
minim = 10 ** 10
for i in range(123123, 345345 + 1):
    if is_prime(i):
        maxim = i
        minim = min(minim, i)
print(minim, maxim)

Ответ: 123127 345329

Ошибка.
Попробуйте повторить позже

Задача 13#54978

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [4301614; 4301717], простые числа. В качестве ответа выводите сначала порядковый номер найденного числа, затем через пробел само число. Далее через пробел повторите это для следующего найденного числа. То есть формат ответа: номер1 число1 номер2 число2 ...

Показать ответ и решение
def is_prime(number):
    if number == 1: return False
    for div in range(2, int(number ** 0.5) + 1):
        if number % div == 0:
            return False
    return True


for i in range(4301614, 4301717 + 1):
    if is_prime(i):
        print(i - 4301614 + 1, i, end=’ ’)

Ответ: 10 4301623 56 4301669 86 4301699 88 4301701 94 4301707
Рулетка
Вы можете получить скидку в рулетке!