题目:
给定两个数A和lcm(A,B),求最小的B.
从简单的例子中找到存在的解题思路:
重复那个回溯的过程,2变成了8,,36则变成了9,相反的也能这样:9-->36, 8-->2.
#include <iostream>
#include<cstdio>
using namespace std;
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int main(int argc, char *argv[]) {
//freopen("cin.txt","r",stdin);
int A,C,t;
while(cin>>t){
while(t--){
scanf("%d%d",&A,&C);
if(C%A){
printf("NO SOLUTION\n");
continue;
}
int y=C/A,res=1,g=gcd(y,A);
while(g>1){
res*=g;
A/=g;
g=gcd(y,A);
}
y*=res;
printf("%d\n",y);
}
}
return 0;
}