在洛谷做P029
#include <bits/stdc++.h>
using namespace std;
int cnt = 0;
int kkk(int a,int b)
{
if(b == 0) return a;
else return kkk(b,a % b);
}
int check1(int a,int b)
{
return a * b / kkk(a,b);
}
int main()
{
int x,y;
cin >> x >> y;
long long pro = x * y;
if(x == y)
cnt--;
for(int z = 1;z < sqrt(x * y);z++)
{
if(pro % z == 0 && kkk(z,pro / z) == x)
cnt += 2;
}
cout << cnt;
return 0;
}
有一个样例没过,wa了
无
通过该题
有个结论 最大公因数*最小公倍数 = 两数乘积
#include <bits/stdc++.h>
using namespace std;
int n, m, s;
signed main(void)
{
cin >> n >> m;
for (int i = n; i <= m; i++)
{
int j = n * m / i;
// gcd是求最大公因数
if (__gcd(i, j) == n && i * j / __gcd(i, j) == m)
s++;
}
cout << s;
}