Top.Mail.Ru
Ответы

Информатика задача, кто решит дам лучший ответ, не с нейросети а рабочим кодом на питоне

Обозначим через M разность максимального и минимального числа среди простых делителей целого числа, не считая самого числа. Если таких делителей у числа нет, то считаем значение M равным нулю. Напишите программу, которая перебирает целые числа, большие 550000, в порядке возрастания и ищет среди них такие, для которых значение M при делении на 27 даёт в остатке 12. Выведите первые 3 найденных числа в порядке возрастания, справа от каждого числа, через пробел, запишите соответствующее значения M

По дате
По рейтингу
Аватар пользователя
Ученик

помогаю

Вот результаты для задачи:

Число: 550002, M = 2955
Число: 550025, M = 444
Число: 550037, M = 66

Аватар пользователя
Мыслитель

Вот убожество-то. Кубическая сложность для такого простого алгоритма. И автор ещё лайк этому поставил. Ну, пусть тогда этот ответ и берёт.

Аватар пользователя
Мудрец
123456789101112131415161718
 def find_m_with_remainder_12_mod_27(start=550001, count=3): 
    from sympy import primefactors 
    from itertools import count as counter 
     
    results = [] 
    for n in counter(start): 
        factors = primefactors(n) 
        if len(factors) >= 2: 
            m = max(factors) - min(factors) 
            if m % 27 == 12: 
                results.append((n, m)) 
                if len(results) == count: 
                    return results 
     
    return results 
 
for n, m in find_m_with_remainder_12_mod_27(): 
    print(n, m) 
Аватар пользователя
Мыслитель

Я знал, что 4-м будешь ты. Где-то надёргал вызовов модных библиотек, но сам алгоритм как был тупейшим перебором с кучей лишний действий, так и остался. Так что ты в очередной раз засвидетельствовал своё невежество. И верни потерянную буковку на конце имени.

Аватар пользователя
Ученик

import math

def prime_factors(n):
"""
Функция возвращает список простых делителей числа n.

:param n: Число, для которого ищем простые делители.
:return: Список простых делителей.
"""
factors = []
# Проверяем деление на 2
while n % 2 == 0:
factors.append(2)
n //= 2
# Проверяем нечетные делители
for i in range(3, int(math.sqrt(n)) + 1, 2):
while n % i == 0:
factors.append(i)
n //= i
# Если после всех проверок остается простое число > 2
if n > 2:
factors.append(n)
return factors

def find_numbers():
"""
Функция находит первые три числа, которые соответствуют условиям задачи.

:return: Три первых подходящих числа и соответствующие им значения M.
"""
count = 0
num = 550001 # Начинаем проверку с числа 550001
result = [] # Хранит результат (число и значение M)

while count < 3:
factors = prime_factors(num)

if len(factors) >= 2:
max_factor = max(factors)
min_factor = min(factors)
M = max_factor - min_factor

if M % 27 == 12:
result.append((num, M))
count += 1

num += 1

return result

# Запускаем программу
result = find_numbers()
for num, M in result:
print(f"{num} {M}")

Аватар пользователя
Мыслитель

Смысл это публиковать? Точно такая же лажа, как и два остальных ответа.

Аватар пользователя
Ученик

using System;

class Main
{
static void Main()
{
int M = 0;
for (int i = 50001; i < 100000; i++)
{
int[] primeDivs = PrimeDivs(i);
if (primeDivs.Length == 0) continue;

int num = i;
foreach (int divisor in primeDivs)
{
num /= divisor;
}

}
}

private static bool IsPrime



Видео по теме