枚举P,这样从A到B。
简单的数论当中有:两个数字的最小公倍数*两个数字的最大公约数=两个数字的乘积。
这里做一个简单的推论:若A=p*q,B=p*r;
且q 和 r互质
那么(a,b)= p;
[a,b]=p*q*r;
则(a,b)*[a,b]=p*q*r*p=A*B;
#include<stdio.h>
using namespace std;
int ans=0;
int A,B;
int init()
{
scanf("%d %d",&A,&B);
}
int gys(int a,int b)
{
if (a%b==0) return b;
else return gys(b,a%b);
}
int work()
{
int P,Q;
for (P=A;P<=B;P++)
if (A*B%P==0)
{
Q=A*B/P;
if (gys(P,Q)==A) ans++;
}
}
int put()
{
printf("%d",ans);
}
int main()
{
init();
work();
put();
return 0;
}