View Code of Problem 3836

#include<bits/stdc++.h>
using namespace std;
//注意这道题输入要以EOF结束!!! 
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;
	while(cin>>GCD>>LCM) {
		long i,j=1,b;
		vector<long> va;
		vector<long> vb;
		for(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]<<endl;
	}
}

Double click to view unformatted code.


Back to problem 3836