比赛 20160303 评测结果 AAAAAAAAAA
题目名称 Hankson的趣味题 最终得分 100
用户昵称 Fancy 运行时间 0.015 s
代码语言 C++ 内存使用 0.48 MiB
提交时间 2016-03-03 19:18:31
显示代码纯文本
#include<cstdio>
using namespace std;
const int N=50001;
int T,ans,a0,a1,b0,b1,tot,prime[N];
bool not_p[N];
void pre()
{
	not_p[1]=1;
	for(int i=2;i<N;i++)
	{
		if(!not_p[i]) prime[++tot]=i;
		for(int j=1;j<=tot&&prime[j]*i<N;j++)
		{
			not_p[prime[j]*i]=1;
			if(!(i%prime[j])) break;
		}
	}
}
bool calc(int x)
{
	int c1=0,c2=0,c3=0,c4=0;
	while(!(a0%x)) a0/=x,c1++;
	while(!(a1%x)) a1/=x,c2++;
	while(!(b0%x)) b0/=x,c3++;
	while(!(b1%x)) b1/=x,c4++;
	if(c1==c2&&c3==c4&&c1<=c3) ans*=c3-c1+1;
	else if((c1==c2&&((c3==c4&&c1>c3)||(c3!=c4&&c4<c1)))||
	        (c1!=c2&&((c3==c4&&c2>c3)||(c3!=c4&&c2!=c4))))  ans=0;
	return ans;
}
int main()
{
	freopen("son.in","r",stdin);
	freopen("son.out","w",stdout);
	scanf("%d",&T);pre();
	while(T--)
	{
		ans=1;
		scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
		for(int i=1,x=prime[i];x*x<=b1;i++,x=prime[i])
		if(!(b1%x))
		  if(!calc(x)) 
		    break;
		if(b1!=1) calc(b1);
		printf("%d\n",ans);
	}
}