Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [185 311; 185 330], числа, имеющие ровно четыре различных натуральных делителя. Для каждого найденного числа запишите эти четыре делителя в четыре соседних столбца на экране с новой строки. Делители в строке должны следовать в порядке возрастания.
Например, в диапазоне [12; 14] ровно четыре различных натуральных делителя имеет
1 2 7 14
Ответ:
Решим задачу перебором. Будем проверять количество делителей каждого числа из диапазона, если их количество равно четырём — записываем их
Приведём решение на языке Pascal.
var
x, numDel, i, j: longint;
d: array[1..4] of longint;
begin
for i := 185311 to 185330 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 2 92657 185314
1 47 3943 185321
1 241 769 185329
Приведём решение Павла Шостка на языке Pascal.
uses School;
(185311..185330).Where(x->x.divisorscount=4).Select(x->x.divisors).PrintLines(s->s[0]+' '+s[1]+' '+s[2]+' '+s[3]);
Приведём решение Витаса Ремейкиса на языке Python.
for num in range(185311, 185331):
deliteli = []
for d in range(1, int(num**0.5) + 1):
if num % d == 0:
deliteli.append(d)
if num//d != d:
deliteli.append(num//d)
if len(deliteli) == 4:
deliteli.sort()
print(deliteli[0],deliteli[1],deliteli[2],deliteli[3])
Приведём решение Михаила Глинского на языке Python.
def F(x):
s={1,x}
for i in range(2,round(x**0.5)+1):
if x%i==0:
s.add(i)
s.add(x//i)
return sorted(s)
for x in range(185311,185331):
if len(F(x)) == 4:
print(*F(x))

