Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [174457; 174505], числа, имеющие ровно два различных натуральных делителя, не считая единицы и самого числа. Для каждого найденного числа запишите эти два делителя в два соседних столбца на экране с новой строки в порядке возрастания произведения этих двух делителей. Делители в строке также должны следовать в порядке возрастания.
Например, в диапазоне [5; 9] ровно два различных натуральных делителя имеют
2 3
2 4
Ответ:
Решим задачу перебором. Будем проверять количество делителей каждого числа из диапазона, если их количество равно двум — записываем их в массив d.
Приведём решение на языке Pascal.
var
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.
В результате работы программа должна вывести следующее:
3 58153
7 24923
59 2957
13 13421
149 1171
5 34897
211 827
2 87251
Приведём решение Владимира Лукьянчикова на языке Pascal.
uses school;
begin
for var i := 174457 to 174505 do begin
var w := i.Divisors;
if w.Count = 4 then println(w[1], w[2]);
end;
end.
Приведём решение Петра Полякова на языке Python.
def f(x):
k=2
deliteli=set()
while k * k <= x:
if x % k==0:
deliteli.add(k)
if x // k < x:
deliteli.add(x // k)
k = k + 1
return sorted(deliteli)
start = 174457
end = 174505
for i in range(start, end + 1):
if len(f(i)) == 2:
print(f(i))
Приведём решение Максима Глинских на языке Python.
for x in range(174457,174505+1):
k=0
s=[]
for y in range(2,x//2+1):
if x%y==0:
k+=1
s.append(y)
if k>2:
break
if k==2:
print(*s)

