
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
Если нужна программа именно на 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
Решим задачу перебором. Сгенерируем числа, подходящие под условия задачи. Массив 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
Похожие вопросы
- Язык си Найти все делители натурального числа N и вывести их в порядке возрастания и убывания.
- На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
- Си. Цикл for. Что не так? Составить программу вывода на экран всех простых чисел не превосходящих введеннного числа N
- Даны число N и последовательность из N целых чисел. Найти количество и сумму тех чисел, которые нечетны и положительны.
- Задача по Массивах С++ Дано натуральное число N...
- Даны два числа: n и m. Создайте двумерный массив размером n×m и заполните его в соответствии с примером.
- В LINUX OS Написать программу, которая из командной строки получает целое число N и некоторый текст “Text”.
- С++. БЕЗ ИСПОЛЬЗОВАНИЯ АДРЕСОВ И УКАЗАТЕЛЕЙ. Пусть дано натуральное число n и вещественная матрица размером n x 10.
- Заданы натуральное число n и действительные числа a1, a2, …, an. Вычислить
- C++ Дано натуральное число N. Вычислить