记录编号 290234 评测结果 AAAAAAAAAA
题目名称 [NOIP 2009]Hankson的趣味题 最终得分 100
用户昵称 Gravatardateri 是否通过 通过
代码语言 C++ 运行时间 0.072 s
提交时间 2016-08-05 22:14:58 内存使用 1.07 MiB
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
struct aa{
	int v,t;
};
aa x[100001];
int fenjie(aa *p,int n)
{
	int count=0,i=2;
	while(i*i<=n)
	{
	  if(!(n%i))
	  {
	  	p[++count].v=i;
	  	p[count].t=0;
	  	while(!(n%i))
	      n/=i,p[count].t++;
	  }
	  i++;
	}
	if(n>1)
	  p[++count].v=n,p[count].t=1;
	return count;
}
int work(int x,int i)
{
	int count=0;
	while(!(x%i))
	  x/=i,count++;
	return count;
}
int main()
{
	freopen("son.in","r",stdin);
	freopen("son.out","w",stdout);
	int i,t,j,a0,a1,b0,b1,num,minn,maxx,count,a,b,c,ans;
	scanf("%d",&t);
	while(t--)
	{
		//memset(x,0,sizeof(x));
		scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
		num=fenjie(x,b1);
//		for(i=1;i<=num;i++)
//		  printf("%d %d\n",x[i].v,x[i].t);
		ans=1;
		for(i=1;i<=num;i++)
		{
			count=0;
			a=work(a0,x[i].v);
			b=work(a1,x[i].v);
			c=work(b0,x[i].v);
		//printf("\n%d %d %d %d\n",a,b,c,x[i].t);
//			for(j=0;j<=x[i].t;j++)
//			  if(min(a,j)==b&&max(j,c)==x[i].t)
//			    count++;
			if(a==b)
			   minn=a;
			else
			{
				if(max(b,c)==x[i].t)
				  continue;
				else
				  break;
			}
			if(c==x[i].t)
			  maxx=c;
			else
			{
				if(min(a,x[i].t)==b)
				  continue;
				else
				  break;
			}
			//printf("%d\n\n",x[i].t);
			ans*=maxx-minn+1;
		}
		if(i==num+1)
		  printf("%d\n",ans);
		else
		  printf("0\n");
	}
	return 0;
}