Задача к ЕГЭ по информатике на тему «делители числа» №6

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

Решение 1:

def f(n):
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return n != 1
c = []
for x in range(503123, 533212):
    t = set()
    for i in range(1, int(x**0.5)+1):
        if x % i == 0:
            if f(i):
                t.add(i)
            if f(x//i):
                t.add(x//i)
    if f(sum(t)) and f(len(t)):
        c.append(x)
print(len(c), max(c)-min(c))

Решение 2:

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(1,int(x**0.5)+1):
        if x % i == 0:
            # Добавляем делитель и парный ему в множество
            d |= {i,x//i}
    return sorted(d) # Возвращаем отсортированный список делителей числа x
ans = []
for x in range(503123,533212):
    d = [i for i in divs(x) if simple(i)] # список , в котором хранятся только простые делители числа
    if simple(len(d)) and simple(sum(d)): # если длина и сумма простых делителей являются простыми числами
        ans += [x]
print(len(ans), max(ans)-min(ans))

Ответ: 1686 30070
Оцените статью
Я решу все!