Суть задачи: нужно написать программу которая ищет среди целых чисел, принадлежащих числовому отрезку [174457; 174505], числа, имеющие ровно два различных натуральных делителя, не считая единицы и самого числа. Для каждого найденного числа записать эти два делителя в два соседних столбца на экране с новой строки в порядке возрастания произведения этих двух делителей. Делители в строке также должны следовать в порядке возрастания.
Например, в диапазоне [5; 9] ровно два различных натуральных делителя имеют числа 6 и 8, поэтому для этого диапазона вывод на экране должен содержать следующие значения:
2 3
2 4
То, как я пытался решить эту задачку:
a = 174457
b = 174505
k = 0
d = []
for n in range(a, b+1):
if n%2 == 0:
k+=1
d.append(n)
if k > 2:
break
if k == 2:
print(d[0], d[1])
У меня просто не хватает мозгов, чтобы понять,
как найти эти натуральные делители
В ответах к этой задачке был представлен код на паскале:
var
x, numDel, i, j: longint;
d: array[1..2] of longint;
begin
for i := 174457 to 174505 do begin
numDel := 0;
for j := 2 to i div 2 do begin
if i mod j = 0 then begin
numDel := numDel + 1;
if numDel > 2 then break;
d[numDel] := j;
end;
end;
if numDel = 2 then writeln(d[1], ' ', d[2]);
end;
end.
Но, когда я пытался сделать что-то похожее на пайтоне, выходил ещё более неправильный результат.
Вот, что выдаёт моя прога:
174458 174460
174458 174460
А должна вот это:
3 58153
7 24923
59 2957
13 13421
149 1171
5 34897
211 827
2 87251
Помогите, плиз