C/C++

Найдите все на уральные числа N принадлежащему отрезку.

 #include  
#include
#include
using namespace std;
int main() {
constexpr auto a = 400000000;
constexpr auto b = 600000000;
vector am{1};
auto p = 1;
while (true) {
const auto x = 2 b || x < 0) break;
am.push_back(x);
p += 2;
}
vector an;
p = 1;
while (true) {
const auto x = static_cast(pow(3, p));
if (x > b || x < 0) break;
an.push_back(x);
p += 2;
}
set box;
for (auto xa : am) {
for (auto xb : an) {
auto x = xa * xb;
if (b < x) break;
if (x
AD
Aleks D
59 394
Лучший ответ
Если нужна программа именно на C++:
 #include  
#include

long long my_power(long long c, unsigned p)
{
long long r = 1;
while(p)
{
r *= c;
p--;
}
return r;
}

int main()
{
const long long min = 400000000, max = 600000000;
std::vector N;
long long tmp;
unsigned m,n;
n = 1;

while(true)
{
m = 2;
while((tmp = my_power(2,m) * my_power(3,n)) = min)
N.push_back(tmp); // добавляем значение, но они могут повторяться

m += 2;
}
n += 2;
tmp = 12;
if(my_power(2,m) > max && my_power(3,n) > max)
break;
}

// нужна сортировка
for(long long x = 0; x < N.size(); x++)
{
for(long long y = x + 1; y < N.size(); y++)
{
if(N.at(x) > N.at(y))
{
tmp = N.at(x);
N.at(x) = N.at(y);
N.at(y) = tmp;
}
}
}
std::cout
Решение.
Решим задачу перебором. Сгенерируем числа, подходящие под условия задачи. Массив arr2 заполним числами, которые являются чётными степенями двойки, т. е. 20, 22, 24 и т. д. А массив arr3 заполним числами, которые являются нечётными степенями тройки, т. е. 31, 33, 35 и т. д. Теперь будем последовательно перемножать элементы массивов arr2 и arr3 и искать такие результаты произведения, которые будут лежать в отрезке [400 000 000; 600 000 000], эти числа будем записывать в массив answer. После нахождения всех возможных чисел, удовлетворяющих условию задачи, отсортируем массив answer по возрастанию и выведем на экран все элементы этого массива, отличные от нуля.

Решение на языке 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]) >= 400000000) and ((arr2[i] * arr3[j]) <= 600000000) 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.

Решение на языке Python:

for j in range(400000000, 600000000 + 1):
i = j
m = 0
n = 0
while i % 2 == 0:
i //= 2
m += 1
if m % 2 == 0:
while i % 3 == 0:
i //= 3
n += 1
if n % 2 != 0 and i == 1:
print(j)


Решение на языке Python.

a=[]
for m in range(0,30,2):
for n in range(1,20,2):
x = 2**m * 3**n
if 400000000<= x <=600000000:
a.append(x)
print(*sorted(a))

В результате работы программа должна вывести следующее:
408146688
452984832
516560652
573308928

Похожие вопросы