AC Code:
#include<iostream>
using namespace std;
#define int unsigned long long
int x,y;
int ans=0;
inline int gcd(int a, int b){
if(b==0)return a;
return gcd(b,a%b);
}
#define lcm(a,b) a*b/x
signed main(){
cin>>x>>y;
if(x==y){
cout<<1<<endl;return 0;
}y*=x;
for(int i=x;i*i<=y;i+=x)if(y%i==0&&gcd(y/i,i)==x)++ans;
cout<<ans*2;
return 0;
}
但是用c重写一遍就错了
typedef unsigned long long ULL;
x,y,i;ULL ans;
ULL gcd(ULL x,ULL y){if(!y)return x;return(y,y%x);}
main(){
scanf("%d%d",&x,&y);
if(x==y){putchar('1');return;}
y*=x;
for(i=x;i*i<=y;i+=x)
if(y%i==0&&gcd(y/i,i)==x)
++ans;
printf("%lld",ans*2);
}