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

 

posted on 2023-04-17 02:30  towboat  阅读(13)  评论(0)    收藏  举报