话不多说,直接上代码和题目
代码如下:
//最大公约数m可用奥数法求
//最小公倍数n,实际上为两数mx,my的mxy(xy均为素数即xy的最大公约数为1)
//所以有n=mxy
//y=n/(mx)且y与x互质即最大公约数为1
#include<iostream>
typedef long long LL;//防止出问题统一用LL
using namespace std;
LL maxY(LL a,LL b)//最大公约数
{
if (a < b) { LL c = a; a = b; b = c; }//保证a>=b
while(1){
LL c = a % b;
if (c == 0) return b;
a = b; b = c;
}
}
LL minB(LL a, LL b) {//最小公倍数//方便理解扩展的
return a * b / max(a, b);
}
int main() {
LL a, b,x=0;
cin >> a >> b;
for (LL i = a; i <= b; i += a)
if (b % i != 0) continue;
else
{
LL j = b / i;
if (maxY(i / a, j) == 1)
{
//cout << i << ' ' << a * j << endl;//测试用
x++;
}
}
cout << x;
return 0;
}