记录编号 432556 评测结果 AAAAAAAAAA
题目名称 [NOIP 2009]Hankson的趣味题 最终得分 100
用户昵称 GravatarCSU_Turkey 是否通过 通过
代码语言 C++ 运行时间 1.035 s
提交时间 2017-08-03 15:44:50 内存使用 0.50 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int vis[50005],n,a0,a1,b0,b1;
vector<int>pls;
void get_p(){
	for(int i=2;i<=50000;i++){
		if(!vis[i])
		pls.push_back(i);
		for(int j=0;j<pls.size()&&pls[j]*i<=n;j++){
			vis[pls[j]*i]=1;
			if(i%pls[j]==0)
			break;
		}
	}
}
int in(){
	int a=0;
	char ch=getchar();
	while(!('0'<=ch&&'9'>=ch))ch=getchar();
	while('0'<=ch&&'9'>=ch){
		a=(a<<3)+(a<<1)+(ch^'0');
		ch=getchar();
	}
	return a;
}
int main()
{
	freopen("son.in","r",stdin);
	freopen("son.out","w",stdout);
//	freopen("1.txt","r",stdin);
	scanf("%d",&n);
	get_p();
	while(n--){
		int cnt=1;
		a0=in();
		a1=in();
		b0=in();
		b1=in();
		for(int i=0;i<pls.size();i++){
			int x=pls[i];
			if(b1%x)continue; 
			int cnt1=0;
			while(a0%x==0){
				cnt1++;
				a0/=x;
			}
			int cnt2=0;
			while(a1%x==0){
				cnt2++;
				a1/=x;
			}
			int cnt3=0;
			while(b0%x==0){
				cnt3++;
				b0/=x;
			}
			int cnt4=0;
			while(b1%x==0){
				cnt4++;
				b1/=x;
			}
			if(cnt1==cnt2&&cnt3==cnt4)//可以在一个区间中选 
			cnt*=(cnt3-cnt1+1);
			else if(cnt1==cnt2){//必须选一个值,但是另一个范围不允许,下面同理 
				if(cnt2>cnt4){
					cnt=0;
					break;
				}
			}
			else if(cnt3==cnt4){
				if(cnt2>cnt4){
					cnt=0;
					break;
				}
			}
			else if(cnt1>cnt2&&cnt3<cnt4){
				if(cnt2!=cnt4){
					cnt=0;
					break;
				}
			}
		}
		if(b1>1&&b0>1&&a1!=b1&&a0%b1) cnt*=2;
		cout<<cnt<<endl;
	}
	return 0;
}