View Code of Problem 3836

#include<string>
#include<cstring>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<iomanip>
#include<algorithm>
using namespace std;
int gcd(int a, int b)
{
	if (b == 0)
		return a;
	else
		return gcd(b, a%b);
}
int lcm(int a, int b)
{
	return a * b / gcd(a, b);
}
int main()
{
	int g, l;
	while (cin >> g >> l)
	{
		int z = g * l;
		int cnt = 0;
		int min;
		int min1, min2;
		for (int i = 1;i < (int)sqrt(z) + 1;i++)
		{
			if (z%i == 0)
			{
				int q = z / i;
				if (gcd(i, q) == g && lcm(i, q) == l)
				{
					cnt++;
					if (cnt == 1)
					{
						min = i + q;
						min1 = i;
						min2 = q;
					}
					if (i + q < min)
					{
						min = i + q;
						min1 = i;
						min2 = q;
					}
				}
			}
		}
		if (min1 > min2)
			swap(min1, min2);
		cout << min1 << " " << min2<< endl;
	}
	
}

Double click to view unformatted code.


Back to problem 3836