Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [489 421; 489 440], числа, имеющие ровно четыре различных натуральных делителя. Для каждого найденного числа запишите эти четыре делителя в четыре соседних столбца на экране с новой строки. Делители в строке должны следовать в порядке возрастания.
Например, в диапазоне [12; 14] ровно четыре различных натуральных делителя имеет
1 2 7 14
Ответ:
Решим задачу перебором. Будем проверять количество делителей каждого числа из диапазона, если их количество равно четырём — записываем их в двумерный
Приведём решение на языке Pascal.
var
x, numDel, i, j: longint;
d: array[1..4] of longint;
begin
for i := 489421 to 489440 do begin
numDel := 0;
for j := 1 to i do begin
if i mod j = 0 then begin
numDel := numDel + 1;
if numDel > 4 then break;
d[numDel] := j;
end;
end;
if numDel = 4 then writeln(d[1], ' ', d[2], ' ', d[3], ' ', d[4]);
end;
end.
В результате работы программа должна вывести следующее:
1 19 25759 489421
1 2 244711 489422
1 13 37649 489437
Приведём другое решение на языке Python.
maxi = 0
d = [1 for i in range(5)]
for i in range(489421, 489441):
numdel = 0
for j in range(1, i + 1):
if i % j == 0:
numdel += 1
if numdel > 4:
break
d[numdel] = j
if numdel == 4:
print(d[1], d[2], d[3], d[4])
Приведём решение Даниила Потапова на языке Python.
def get_delimiters(num: int) -> set:
delimiter = 1
result = set()
while delimiter <= num ** 0.5:
if num % delimiter == 0:
result.add(delimiter)
result.add(num // delimiter) # Добавляем второй делитель
delimiter += 1
return result
for i in range(489421, 489440):
if len(get_delimiters(i)) == 4:
print(*sorted(get_delimiters(i)))

