基本上符合的答案就會是[latex]a = G, b = L[/latex],原因如下:
先證明什麼時候會有解,由於[latex]G | a, b[/latex]且[latex]a, b | L[/latex],故至少[latex]G | a, b | L[/latex],亦指在有解的情況下至少G要能整除L。
那在有解的情況下a如果要最小該會是多少呢?由於[latex]G | a[/latex],故a為G的某個倍數,而其中最小的就為G。那在[latex]a = G[/latex]的情況下一定會有解嗎?由於[latex]G \times L = a \times b[/latex],而[latex]a = G[/latex],所以[latex]G \times L = G \times b[/latex],整理一下可得[latex]b = L[/latex],所以在有解的情況下最符合的答案即是[latex](a, b) = (G, L)[/latex]。
C++(0.000)
/*******************************************************/
/* UVa 11388 GCD LCM */
/* Author: Maplewing [at] knightzone.studio */
/* Version: 2016/04/28 */
/*******************************************************/
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int caseCount;
while( scanf("%d", &caseCount) != EOF ){
for( int caseNumber = 0 ; caseNumber < caseCount ; ++caseNumber ){
int G, L;
scanf("%d%d", &G, &L);
if( L % G == 0 ){
printf("%d %d\n", G, L);
}
else{
printf("-1\n");
}
}
}
return 0;
} 