View Code of Problem 3836

#include<bits/stdc++.h>
using namespace std;
int gcd(int m, int n) {
	if(m<n) swap(m,n);
	int t=m%n;
	while(t) {
		m=n;
		n=t;
		t=m%n;
	}
	return n;
} 
int main() {
	//很明显GCD是最大公因数 LCM是最小公倍数
	int GCD, LCM;
	cin>>GCD>>LCM;
	int j=1,b;
	vector<long> va;
	vector<long> vb;
	for(long i=GCD; i<=sqrt(GCD*LCM); i=j*GCD) {
		b=GCD*LCM/i;
		if(GCD*LCM%i==0&&gcd(i,b)==GCD) {
			va.push_back(i); 
			vb.push_back(b); 
		}
		j++;
	}
	int min=va[0]+vb[0], f=0;
	for(int i=1; i<va.size(); i++) {
		if(min>va[i]+vb[i]) {
			min=va[i]+vb[i];
			f=i;
		}
	}
	cout<<va[f]<<" "<<vb[f];
}

Double click to view unformatted code.


Back to problem 3836