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

25.02 Особые числа (простые, фибоначи, факториал, палиндромы)

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

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

Задача 21#54983Максимум баллов за задание: 1

На отрезке [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

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

Задача 22#56462Максимум баллов за задание: 1

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

Показать ответ и решение
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

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

Задача 23#57996Максимум баллов за задание: 1

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [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

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

Задача 24#58107Максимум баллов за задание: 1

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [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

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

Задача 25#60994Максимум баллов за задание: 1

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [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

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

Задача 26#60998Максимум баллов за задание: 1

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [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

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

Задача 27#61003Максимум баллов за задание: 1

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

Показать ответ и решение

Способ решения 1

# Функция для выявления простых чисел
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))

Способ решения 2

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

def divs(x): # функция, которая возвращает список делителей числа
    d = set()
    for i in range(2,int(x**0.5)+1):
        if x % i == 0:
            d.add(i)
            d.add(x//i)
    return sorted(d)

ans = []
for x in range(351627,428764):
    d = [i for i in divs(x) if isSimple(i)] # список, в котором хранятся только простые делители числа
    if len(d) == 2 and d[0]*d[1] == x: # если таких делителей ровно 2 и их произведение ровно числу
        ans += [x]
print(len(ans),sum(ans)//len(ans))

Ответ: 16200 390088

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

Задача 28#61233Максимум баллов за задание: 1

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [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

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

Задача 29#62840Максимум баллов за задание: 1

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

Числа Фибоначчи - элементы числовой последовательности, в которой первые два числа равны 1 и 1, а каждое последующее число равно сумме двух предыдущих чисел.

Факториалом числа x называется произведение всех натуральных чисел, меньших или равных x.

Показать ответ и решение
# Записываем в массив числа Фибоначчи
fib = [0] * 1000
fib[0] = 1
fib[1] = 1
for i in range(2, 1000):
    fib[i] = fib[i - 1] + fib[i - 2]

# Записываем в массив факториалы
fact = [0] * 1000
fact[0] = 1
for i in range(1, len(fact)):
    fact[i] = i * fact[i - 1]

fib = [x for x in fib if 200_000 <= x <= 3_000_000] # список чисел ряда Фибоначчи, которые находятся в области исследуемой области
fact = [x for x in fact if 200_000 <= x <= 3_000_000] # список факториалов, которые находятся в области исследуемой области

mn = 10**10 # минимальная разность между числом ряда Фибоначчи и факториалом
numbers = [] # список, в котором будет храниться пара с минимальной разностью

for factorial in fact: #проход по числам факториалов
    for fibonacci in fib:#проход по числам ряда Фибоначчи
        if abs(fibonacci-factorial) < mn:
            mn = abs(fibonacci-factorial)
            numbers = [fibonacci,factorial]
print(sorted(numbers)[::-1])

Ответ: 362880 317811

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

Задача 30#63209Максимум баллов за задание: 1

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [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
Рулетка
Вы можете получить скидку в рулетке!