Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [95632; 95650], числа, имеющие ровно шесть различных нечётных натуральных делителей (при этом количество четных делителей может быть любым). Для каждого найденного числа запишите эти шесть делителей в шесть соседних столбцов на экране с новой строки. Делители в строке должны следовать в порядке возрастания.
Например, в диапазоне [2; 48] ровно шесть нечётных различных натуральных делителей имеет
в диапазоне [480; 489] ровно шесть нечётных различных натуральных делителей имеет
Ответ:
Решим задачу перебором. Будем проверять количество делителей каждого числа из диапазона, если их количество равно шесть — записываем их в двумерный
Приведём решение на языке Pascal.
var
numDel, i, j: longint;
d2: array[1..6] of longint;
begin
for i := 95632 to 95650 do begin
numDel := 0;
for j := 1 to i do begin
if (i mod j = 0) and (j mod 2 <> 0) then begin
numDel := numDel + 1;
if numDel > 6 then break;
d2[numDel] := j;
end;
end;
if (numDel = 6) then writeln(d2[1], ' ', d2[2], ' ', d2[3], ' ', d2[4], ' ', d2[5], ' ', d2[6]);
end;
end.
В результате работы программа должна вывести следующее:
1 3 9 10627 31881 95643
1 7 49 61 427 2989
1 5 25 1913 9565 47825
Примечание.
Заметим, что программа должна вывести только нечетные делители числа. Если число нечетное, то оно является своим нечетным делителем и выводится на экран. Если число четное, то оно не является своим нечетным делителем и не выводится на экран. Желающие могут изменить программу и вывести на экран дополнительно само число, но такая программа не будет соответствовать заданию.
Приведём другое решение на языке Python.
for num in range(95632, 95651):
deliteli = []
for d in range(1, int(num**0.5) + 1):
if num % d == 0:
if d % 2 != 0:
deliteli.append(d)
if num // d != d and num // d % 2 != 0:
deliteli.append(num // d)
if len(deliteli) == 6:
deliteli.sort()
print(deliteli[0], deliteli[1], deliteli[2], deliteli[3], deliteli[4], deliteli[5])
Приведём решение Савелия Новоселова на языке Python.
for i in range(95632, 95650 + 1):
c = 0
h = []
for j in range(1, i + 1):
if i % j == 0:
if j % 2 != 0:
c += 1
h.append(j)
if c == 6:
print(*h)

