题目

代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
unordered_map<int, bool> mp;
int sz;
int main()
{
int n, m;
scanf("%d%d", &n, &m);
int tn = n, tm = m;
for(int i = 2; i * i <= tn; i++)
{
if(tn % i == 0)
{
mp[i] = 1;
while(tn % i == 0) tn /= i;
}
}
if(tn > 1) mp[tn] = 1;
for(int i = 2; i * i <= tm; i++)
{
if(tm % i == 0)
{
if(mp[i])
{
sz = i;
break;
}
while(tm % i == 0) tm /= i;
}
}
if(tm > 1 && mp[tm])
if(!sz) sz = tm; //if(!sz)可以省略
if(sz) printf("%lld", 1ll * n * m / sz / sz);
else puts("0");
return 0;
}