View Code of Problem 3836

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


Back to problem 3836