灯笼规律

Vova计划乘火车去参加会议。 最初,列车在点1,路径的目的地点是点L.列车的速度是每分钟1个长度单位(即在第一分钟,火车在第1点,第二分钟) - 在第2点等等)。

 

路上有灯笼。 它们被放置在具有可被v整除的坐标的点处(即,第一个灯点位于点v,第二个点位于点2v,依此类推)。

 

 

还有一条直立列车占据了从l到r的所有点。

 

 

如果p可被v整除,并且在该位置没有站立列车(p∉[l; r]),Vova可以在点p处看到灯笼。 因此,如果带灯笼的点是站立列车所覆盖的点之一,那么Vova就看不到这个灯笼了。

 

 

你的问题是Vova在路径中会看到的灯笼数量。 Vova计划参加不同的会议,因此您应该回答独立的查询。

 

Input

输入的第一行包含一个整数t(1≤t≤104) - 查询数。

然后是t行。 第i行包含四个整数Li,vi,li,ri(1≤L,v≤1e9,1≤l≤r≤L) - 第i个路径的目标点,灯笼外观的周期和 站立列车占用的段。

Output

打印t行。 第i行应该包含一个整数 - 第i个查询的答案。

Example

Input

4
10 2 3 7
100 51 51 51
1234 1 100 199
1000000000 1 1 1000000000

Output

3
0
1134
0

Note

对于第一个示例查询,答案是3.在位置2,4,6,8和10处有灯笼,但由于站立列车,Vova没有看到位置4和6的灯笼。

对于第二个示例查询,答案是0,因为唯一的灯笼位于点51处,此时还有一个站立列车。

对于第三个示例查询,答案是1134,因为有1234个灯笼,但是Vova没有看到从位置100到位置199的灯笼。

对于第四个示例查询,答案为0,因为站立列车覆盖整个路径。

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int x,y,z,w;
	for(int i=0;i<n;i++)
	{  
	  long long ans;
	  cin>>x>>y>>z>>w;
	  if(z%y==0)
	  z--;
	  ans=x/y+z/y-w/y;
	  if(y==z==w)
	  ans--;
	  cout<<ans<<endl;
	  	
	}
	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值