传送门
题目大意
问闭区间内存在多少对
满足
;
思路
设
那么
找到满足的即可,因为
,时间复杂度
代码
ll l,r,x,y;
ll check(int a,int b){
if(a*x>=l&&a*x<=r&&b*x>=l&&b*x<=r)return 1;
return 0;
}
ll gcd(ll a,ll b){
return !b?a:gcd(b,a%b);
}
int main(){
scanf("%lld%lld%lld%lld",&l,&r,&x,&y);
if(y%x){//x不是y的因数,一定找不到
puts("0");
return 0;
}
ll tmp=y/x;
int cnt=0;
for(int i=1;i*i<=tmp;i++){
if(tmp%i==0&&check(tmp/i,i)&&gcd(i,tmp/i)==1){
if(i==tmp/i)cnt++;
else cnt+=2;
}
}
printf("%d\n",cnt);
}