#include<stdio.h> #include<math.h> #include<stdbool.h> #define prt printf #define inf 0x7fffffff int Gcd(int a,int b) { return a%b?Gcd(b,a%b):b;//递归调用本身来求最大公约数 } int main() { int gcd,lcm; while( scanf("%d %d",&gcd,&lcm) != EOF ){ int k = gcd*lcm; int sqr = sqrt(k),i; int min = inf; int sum = 0,t1,t2; for(i=gcd;i<=sqr;i++){ if( (k%i)==0 && Gcd(k/i,i)==gcd ){ sum=k/i+i; if(sum<min){ min=sum; t1=k/i; t2=i; } } } if(t1>t2){ int temp = t1;t1 = t2;t2 = temp; } prt("%d %d\n",t1,t2); } } |
Double click to view unformatted code.