#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.