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(); }