Regarding Today's Contest problem "EQUIVALENT NUMBERS" EASY EXPLANATION USING MAP

void Generate(int A,map<int,int>&m)
{
//insert no of 2’s found
while(A%2==0)
{
m[2]++;
A/=2;
}
for(int i=3;i<=sqrt(A);i+=2)
{
while(A%i==0)
{
m[i]++;
A/=i;
}
}
if(A>2)
{
m[A]++;
}
}
int main() {
// your code goes here
int T;
cin>>T;
while(T–)
{
int A,B;
cin>>A>>B;
if(A<B and B%A != 0 or B<=A and A%B!=0)
{
cout<<“NO”<<endl;
//prime factors are different
}
else
{
//generate all prime factors along with powers
map<int,int>a;
map<int,int>b;
Generate(A,a);
Generate(B,b);
if(a.size()!=b.size())
{
cout<<“NO”<<endl;
}
else
{
auto it=a.begin();
auto p=b.begin();
int d1=it->second;
int d2=p->second;
double c=double(d1)/double(d2);
int flag=0;
for(auto q:a)
{
int d1=q.second;
int d2=b[q.first];
double d=double(d1)/double(d2);
if(d!=c)
{
flag=1;break;
}
}
if(flag==1)
{
cout<<“NO”<<endl;
}
else
{
cout<<“YES”<<endl;
}
}
}
}
return 0;
}