每个猫群里都分为雄猫和雌猫,第一个猫群里有1只雄猫和n只雌猫,第二个猫群里有2只雄猫和n-1只雌猫....第n个猫群里有n只雄猫和1只雌猫。 xjy和hqy都很喜欢猫,他们对猫分别有好感度a和b,当

版权声明:如果转载,请注明出处。 https://blog.csdn.net/S_999999/article/details/82182316

每个猫群里都分为雄猫和雌猫,第一个猫群里有1只雄猫和n只雌猫,第二个猫群里有2只雄猫和n-1只雌猫....第n个猫群里有n只雄猫和1只雌猫。

xjy和hqy都很喜欢猫,他们对猫分别有好感度a和b,当一个猫群的雄猫数是a的倍数时,这个猫群会对xjy产生好感,同样的,当一个猫群的雌猫数是b的倍数时,这个猫群会对hqy产生好感。

演唱结束后,他们想带一些猫群回他们自己的小窝,但是只有同时对xjy和hqy都产生好感的猫群才能被带走。

他们想知道能带走多少猫群,但xjy在hqy面前通常比较笨,所有只能求救于你了。

Input

第一行一个整数T,(1<=T<=50000),表示有T组测试样例。

之后T行,每行三个整数分别表示n,a,b(1<=n,a,b<=2147483647)

Output

共输出T行,每行对应一个测试数据,表示能带走的猫群数量。

Sample Input 1 

2
5 2 4
10 2 3

Sample Output 1

1
2
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int gcd(ll a,ll b){
	if(b==0)
	 return a;
	return gcd(b,a%b);	
}
void ex_gcd(ll a, ll b,ll &x, ll &y){
	 
	 if(b==0){
	 	x = 1;
	 	y = 0;
	 	return  ;
	 }
	 
	 ex_gcd(b,a%b,x,y);
	 ll tmp = x;
	 x = y;
	 y = tmp - a/b * y; 
	 return ;  
}
int main(void){
	
	int t;
	scanf("%d",&t);
	ll a,b,n;
	while(t--){
		 
		 scanf("%lld%lld%lld",&n,&a,&b);
		 int g = gcd(a,b);
		 if((n+1) % g!=0){
		 	
		 	printf("0\n");
		 	continue;
		 	
		 }
		else {
		   ll  x,y,ans=0;
		   ex_gcd(a,b,x,y);
           ll k,minx , maxy, miny ;
		   k = (n +1)/g;
		   minx = x*k;
		   miny = y*k;
		   int d = b/g;
		   minx = ( minx%d + d)%d;
		   if(minx==0)
		    minx = d; 
		   maxy = n+1- a * minx;
		   if(maxy<0)
		   ans =0;
		   else{
		   maxy /=b;
		   d = a/g;
		   miny =  (miny%d +d )%d;
		   if(miny==0)
		     miny = d;
		     
		     ans = (maxy -miny)/d +1;
		    }
	        printf("%lld\n",ans);
		}
	}
	
	
	
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/S_999999/article/details/82182316