Найдите все натуральные числа N, принадлежащие отрезку [200 000 000; 400 000 000], которые можно представить в виде N = 2m · 3n, где m — чётное число, n — нечётное число. В ответе запишите все найденные числа в порядке возрастания.
Ответ:
Решим задачу перебором. Сгенерируем числа, подходящие под условия задачи. Массив arr2 заполним числами, которые являются чётными степенями двойки, то есть 20, 22, 24 и так далее. А
Приведём решение на языке Pascal.
var
arr2: array[1..30] of int64;
arr3: array[1..20] of int64;
answer: array[1..100] of int64;
t: int64;
i, j, k: integer;
begin
arr2[1] := 1;
arr3[1] := 3;
for i := 1 to 100 do answer[i] := 0;
for i := 1 to 29 do arr2[i+1] := arr2[i] * 2 * 2;
for i := 1 to 19 do arr3[i+1] := arr3[i] * 3 * 3;
for i := 1 to 30 do
for j := 1 to 20 do begin
if ((arr2[i] * arr3[j]) >= 200000000) and ((arr2[i] * arr3[j]) <= 400000000) then
for k := 1 to 100 do
if answer[k] = 0 then begin
answer[k] := arr2[i] * arr3[j];
break;
end;
end;
for i := 1 to 100 do
for j := i + 1 to 100 do
if answer[i] > answer[j] then begin
t := answer[i];
answer[i] := answer[j];
answer[j] := t;
end;
for k := 1 to 100 do
if answer[k] <> 0 then writeln(answer[k]);
end.
В результате работы программа должна вывести следующее:
201326592
229582512
254803968
322486272
Приведем решение Антона Борисова.
Заметим, что числа m и n не превышают 30, поскольку 230 > 1 000 000 000. Будем перебирать числа от 0 до 30, перемножать соответствующие степени двоек и троек и проверять, попало ли произведение в заданный диапазон. Для возведения числа в произвольную степень использована функция exp.
var
e : real;
m, n : integer;
begin
for m := 0 to 30 do begin
for n := 1 to 30 do begin
if ((m mod 2) = 0) and ((n mod 2) = 1) then begin
e := (exp(ln(2)*m))*(exp(ln(3)*n));
if (e >= 200000000.0) and ( e <= 400000000.0) then writeln(e);
end;
end;
end;
end.
Приведём решение на языке Python.
for m in range(0, 31, 2):
for n in range(1, 19, 2):
if(200000000 <= 2 ** m * 3 ** n <= 400000000):
print(2 ** m * 3 ** n)
Приведём решение Юрия Красильникова на языке Python.
a=sorted([2**m*3**n for m in range(0,32,2) for n in range(1,32,2)])
for y in [x for x in a if 200000000 <= x <= 400000000]: print(y)

