1. 程式人生 > >uva11889(GCD,LCM)

uva11889(GCD,LCM)

題意:

LCM(A,B) = C;

已知A,C,求最小的B;

思路:

設X為GCD(A,B);

那麼C = A * B / X;

所以我們先C/A 然後通過乘以公約數,乘回來:

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

int A, B, C;
int main() {
	int t;
	scanf("%d", &t);
	while(t--) {
		scanf("%d%d", &A, &C);
		if(C % A)
			printf("NO SOLUTION\n"); 
		else {
			B = C / A;
			int f = B;
			while(f != 1) {
				f = __gcd(A, B);
				B *= f;
				A /= f;
			}
			printf("%d\n", B);
		}
	}
	return 0;
}