记录编号 |
190433 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2009]Hankson的趣味题 |
最终得分 |
100 |
用户昵称 |
一個人的雨 |
是否通过 |
通过 |
代码语言 |
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*/