Найдите все натуральные числа, принадлежащие отрезку [106 000 000; 107 000 000], у которых ровно три различных чётных делителя. В ответе перечислите найденные числа в порядке возрастания.
Ответ:
Заметим, что, поскольку необходимо найти чётные делители числа, можно не рассматривать нечётные числа из диапазона. Если число чётное, то 1 четный делитель у него уже есть, поэтому переменную count будем объявлять со значением 1. Находя очередной делитель числа, будем проверять, является ли этот делитель чётным, и, если является, будем прибавлять к переменной count единицу. Также заметим, что у каждого делителя числа есть парный делитель — если он чётный, будем прибавлять к переменой count единицу. Также учтём то, что у числа может быть 2 одинаковых делителя (например, у числа 4 два одинаковых делителя — числа 2 и 2).
Приведём решение на языке Pascal.
var
count, i, j: longint;
sqrtI: real;
begin
for i := 106000000 to 107000000 do begin
count := 1;
sqrtI := round(sqrt(i));
if i mod 2 = 0 then begin
for j := 2 to round(sqrt(i)) do begin
if i mod j = 0 then
if j mod 2 = 0 then count := count + 1;
if i mod j = 0 then
if (i div j) mod 2 = 0 then count := count + 1;
if (j * j = i) and (j mod 2 = 0) then count := count - 1;
if count > 3 then break;
end;
end;
if count = 3 then writeln(i);
count := 1;
end;
end.
В результате работы программа должна вывести следующее:
106084178
106492418
106784498
106842962
Приведём решение на языке Python.
for i in range(106000000, 107000000 + 1):
count = 1
sqrtI = round(i ** 0.5)
if i % 2 == 0:
for j in range(2, sqrtI + 1):
if i % j == 0:
if j % 2 == 0:
count += 1
if i % j == 0:
if (i // j) % 2 == 0:
count += 1
if (j * j == i) and (j % 2 == 0):
count -= 1
if count > 3:
break
if count == 3:
print(i)
count = 1
Приведём решение Клима Орлова на языке Python.
def check(x):
k = 0
y = (x//2)
if y**0.5 == int(y**0.5):
z = y**0.5
for j in range(2,int(z**0.5)+1):
if z%j==0:
k += 1
break
if k == 0:
return True
else:
return False
for i in range(106000000,107000001,2):
if check(i) == True:
print(i)

