lcm(a,b)=c
给a,c ,求最小的b
质因数分解的好题

#include <iostream>
#include <cstring>
#include <sstream>
using namespace std;
#define int long long
int a,b,c;
int cnt[100];
int fac[100],tot ;
int ksm(int x,int y){
if(y==0) return 1; int t=ksm(x,y/2);
if(y%2==0) return (t*t);
return t*t*x;
}
void sov(){
cin>>a>>c;
if(c%a){
printf("NO SOLUTION\n");return;
}
int i;
tot=0;
for(i=2;i*i<=c;i++){
if(c%i==0){
fac[++tot]=i;
cnt[tot]=0;
while(c%i==0) cnt[tot]++,c/=i;
}
}
if(c>1){
fac[++tot]=c; cnt[tot]=1;
}
int ans= 1;
for(i=1;i<=tot;i++){
int t= 0;
while(a%fac[i]==0){
a/=fac[i];
t++;
}
if(t<cnt[i]) ans*=ksm(fac[i],cnt[i]);
}
cout<<ans<<endl;
}
signed main(){
int tes;
cin>>tes;
while(tes--) sov();
}
浙公网安备 33010602011771号