最大公约数(gcd),最小公倍数(lcm);
有一个定理:gcd(a,b)*lcm(a,b)=a*b。
//gcd代码
long long gcd(long long q, long long p) {
if (p == 0)return q;
return gcd(p, q % p);
}
//辗转相除法
以P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题为例
#include<bits/stdc++.h>
using namespace std;
long long p, x, y, cnt, q;
long long gcd(long long q, long long p) {
if (p == 0)return q;
return gcd(p, q % p);//gcd程序
}
int main() {
cin >> x >> y;
for (p = x; p * p <= x * y; p += x) {
if (x * y % p != 0)continue;
q = x * y / p;
if (x == gcd(p,q) && p * q / gcd(p,q) == y) {
if (p != q)cnt += 2;
else cnt++;
}
}
cout << cnt;
return 0;
}