(C++) Для двух натуральных чисел P и Q, меньших 1000000, напишите программу, которая определяет, числа являются взаемнопростимы (не имеют общих делителей, кроме 1 Нужно зделать с ссылками!
В общем сделал так чтобы проверялись вообще все возможные перестановки чисел, а не одинарные
#include <iostream>
using namespace std;
bool is_permutation(int* A, int* B, int size);
int main()
{
int *A, *B, N;
bool result;
cin >> N;
A = new int[N];
B = new int[N];
for (int i = 0; i < N; i++) cin >> A[i];
for (int i = 0; i < N; i++) cin >> B[i];
result = is_permutation(A, B, N);
if (result) cout << "YES";
else cout << "NO";
return 0;
}
bool is_permutation(int* A, int* B, int size)
{
int CountInA, CountInB;
for (int i = 0; i < size; i++) { // Перебираем по одному все элементы массива B
CountInA = 0;
CountInB = 0;
for (int j = 0; j < size; j++)
{
if (B[i] == A[j]) CountInA++; // Считаем сколько раз этот элемент встретился в массиве А
if (B[i] == B[j]) CountInB++; // Считаем сколько раз этот элемент встретился в массиве B
}
if (CountInA != CountInB) return false;// Если счётчики не совпали, то сразу выходим из цикла
}
return true;// Если счётчики всегда совпадали, то мы попадём сюда и массивы состоят из одинакового количества одинаковых элементов
}
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
(C++) Для двух натуральных чисел P и Q, меньших 1000000, напишите программу, которая определяет, числа являются взаемнопростимы (не имеют общих делителей, кроме 1 Нужно зделать с ссылками!
Объяснение:
В общем сделал так чтобы проверялись вообще все возможные перестановки чисел, а не одинарные
#include <iostream>
using namespace std;
bool is_permutation(int* A, int* B, int size);
int main()
{
int *A, *B, N;
bool result;
cin >> N;
A = new int[N];
B = new int[N];
for (int i = 0; i < N; i++) cin >> A[i];
for (int i = 0; i < N; i++) cin >> B[i];
result = is_permutation(A, B, N);
if (result) cout << "YES";
else cout << "NO";
return 0;
}
bool is_permutation(int* A, int* B, int size)
{
int CountInA, CountInB;
for (int i = 0; i < size; i++) { // Перебираем по одному все элементы массива B
CountInA = 0;
CountInB = 0;
for (int j = 0; j < size; j++)
{
if (B[i] == A[j]) CountInA++; // Считаем сколько раз этот элемент встретился в массиве А
if (B[i] == B[j]) CountInB++; // Считаем сколько раз этот элемент встретился в массиве B
}
if (CountInA != CountInB) return false;// Если счётчики не совпали, то сразу выходим из цикла
}
return true;// Если счётчики всегда совпадали, то мы попадём сюда и массивы состоят из одинакового количества одинаковых элементов
}