'commit'
This commit is contained in:
47
TangDou/LuoGuBook/P1029_3.cpp
Normal file
47
TangDou/LuoGuBook/P1029_3.cpp
Normal file
@@ -0,0 +1,47 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
typedef long long LL;
|
||||
|
||||
/**
|
||||
测试数据:
|
||||
3 60
|
||||
|
||||
答案:4
|
||||
*/
|
||||
//最大公约数
|
||||
LL gcd(LL x, LL y) {
|
||||
return y ? gcd(y, x % y) : x;
|
||||
}
|
||||
|
||||
//最小公倍数
|
||||
int lcm(int x, int y) {
|
||||
return y / gcd(x, y) * x; //注意顺序,防止乘法爆int
|
||||
}
|
||||
|
||||
int cnt;
|
||||
LL x; //最大公约数
|
||||
LL y; //最小公倍数
|
||||
|
||||
int main() {
|
||||
cin >> x >> y;
|
||||
//理论依据:gcd(p,q)*lcm(p,q)=p*q
|
||||
//枚举最小公倍数y的约数,这个约数可能是p,也可能是y/p
|
||||
for (LL k = 1; k * k <= y; k++)
|
||||
if (y % k == 0) {
|
||||
//可能小因子是p,也可能大因子是p,但大小因子别一样,那样会算重了。
|
||||
LL p = k;
|
||||
LL q = x * y / k; //q是靠计算出来的。q=x*y/p
|
||||
if (gcd(p, q) == x) cnt++;
|
||||
|
||||
//p=y/k,q=x*y/(y/k)=k*x 两组不能重复,就是 y/k!=k
|
||||
if (k == y / k)continue;
|
||||
|
||||
//p是大因子的可能性
|
||||
p = y / k;
|
||||
q = k * x;
|
||||
if (gcd(p, q) == x) cnt++;
|
||||
}
|
||||
cout << cnt << endl;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user