Другие языки программирования и технологии

объясните как задачу решать? С++

Сокращение дроби: Даны натуральные числа m и n. Найти такие два натуральных числа p и q, которые не имеют общих делителей и удовлетворяют условию p/q=m/n.
У меня déjà vu

// Visual C++ 2010 console application
#include <iostream>
#include <locale.h>

using namespace std;

int main()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");

int p = 1, q = 1, n, m, max, min, temp;
double x = 1, y = 1;

do
{
system("cls");

cout << endl << " m = ";
cin >> m;
cout << " n = ";
cin >> n;

if (m == n)
{
cout << endl << " Нет решений, числа n и m равны! ";
fflush(stdin);
cin.get();
}
}
while (m == n);

max = n;
if (max < m) {max = m; min = n;}
else min = m;
x = (double) min / max;
temp = max;

do
{
for (min; min > 0; min--)
{
if (y < x) continue;

for (max; max > 1; max--)
{
y = (double) min / max;

if (y < x) continue;

if (x == y)
{
p = min; q = max;

for (int k = p; k > 0; k--)
{

if (p % k == 0 && q % k == 0 && k > 1) break;
else
{
cout << endl << " p = " << p << "\n q = " << q;

fflush(stdin);
cin.get();

return 0;
}
}
}
}
max = temp;
}

cout << endl << " Нет решений! ";

fflush(stdin);
cin.get();

break;
}
while (true);

return 0;
}
AS
Asylbek Shakirov
61 134
Лучший ответ
Находишь Наибольший общий делитель и делишь на него оба числа. Алгоритм нахождения НОД легко найти, он очень прост.
SS
Sergey Samoylov
87 444
Николай, тебе какой-то кошмар приснился.. . :)

#include <iostream>
using namespace std;
int nod(int a,int b){return a%b?nod(b,a%b):b;}
int main(){int m,n,k; cin>>m>>n; k=nod(m,n); cout<< m/k<< " "<< n/k<< endl; cin.get(); cin.get();}
В школу надо чаще ходить.
два раза зачем писать?
Yavuz .....
Yavuz .....
3 660
Циклом, циклом решать )))
скорее всего while do ...
Иван Гринишак
Иван Гринишак
1 424