Python

Pyrhon. Вложенные циклы. Без использования словарей, списков, строк, функций пользователя

Даны два натуральных числа a и b. Найдите все числа, принадлежащие отрезку [a; b], имеющие ровно 4 различных делителя. Выведите эти делители для каждого найденного числа в порядке возрастания.
С оптимизацией:
 from math import ceil 
def deli(n):
d, m = [], ceil(n**0.5)
for i in range(1, m):
if n % i == 0:
d.append(i); d.append(n // i)
if m * m == n: d.append(m)
return sorted(d)
a, b = map(int, input('a b: ').split())
for i in range(a, b + 1):
deliteli = deli(i)
if len(deliteli) == 4:
print(str(i) + ':', *deliteli)
Так легко находятся нужные числа даже бòльшие триллиона:Но по-моему ещё быстрее можно. Без словарей, списков и функций пользователя - это слишком большое ограничение - я могу, конечно, и так, но что-то мне не хочется...
Волк Серый
Волк Серый
66 572
Лучший ответ
 def find_numbers_with_four_divisors(a, b): 
for i in range(a, b+1):
divisors = []
for j in range(1, i+1):
if i % j == 0:
divisors.append(j)
if len(divisors) == 4:
print(i, divisors)

find_numbers_with_four_divisors(1, 1000)
Dantow.†
Dantow.†
4 629
Для решения данной задачи можно использовать вложенные циклы. Нам нужно перебрать все числа на отрезке [a; b] и проверить, имеют ли они ровно 4 различных делителя. Для этого мы можем использовать два вложенных цикла, в которых будем перебирать делители для каждого числа на отрезке.

Пример кода на Python:

a = int(input()) # Начало отрезка
b = int(input()) # Конец отрезка

for num in range(a, b + 1): # Перебираем числа на отрезке
divisors = [] # Список делителей
for divisor in range(1, num + 1): # Перебираем делители
if num % divisor == 0: # Проверка делимости
divisors.append(divisor) # Добавляем делитель в список
if len(divisors) == 4: # Проверка на 4 различных делителя
print(num, ":", *divisors) # Выводим результат