记录编号 190433 评测结果 AAAAAAAAAA
题目名称 [NOIP 2009]Hankson的趣味题 最终得分 100
用户昵称 Gravatar一個人的雨 是否通过 通过
代码语言 C++ 运行时间 0.231 s
提交时间 2015-10-03 08:43:58 内存使用 0.35 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
const int maxn=5000;
int yz[maxn],su[maxn],num=0,son=0,n,s=0;

void Devide1(int x){
	for (int i=1;i<=sqrt(x);++i)
	   if (x%i==0){
			if (i!=1) yz[++son]=i;
			if (x/i!=1&&x/i!=i) yz[++son]=x/i;
	   }
}

int gcd(int a,int b){
	if (b==0) return a;
	return gcd(b,a%b);
}

int main()
{
	freopen("son.in","r",stdin);
    freopen("son.out","w",stdout);
	scanf("%d",&n);
	for (int i=1;i<=n;++i){
		int a,a0,b,b0,cnt=0;
		scanf("%d %d %d %d",&a,&a0,&b,&b0);
		int ans=b0/b;
		memset(yz,0,sizeof(yz));
		son=0;  int pos=1;
		Devide1(b);
		int g=gcd(ans,b);
		int L=ans/g*b;
		if ((b%ans||b==ans||b==b0)&&gcd(ans,a)==a0&&L==b0) cnt++;
		while (pos<=son){
			int Ans=ans*yz[pos]; pos++;
			int G=gcd(Ans,a);
			if (G!=a0) continue;
			int g=gcd(b,Ans);
			int L=Ans/g*b; 
			if ((b%Ans||(b==Ans&&b0==b)||(b==b0))&&L==b0) {
				//cout<<Ans<<" "<<ans<<endl;
				cnt++; 
			}
		}
		printf("%d\n",cnt);
	}
	//system("pause");
	return 0;
}

/*60 4 66 264*/
/*4 2 81 4050*/