比赛 至少完成十道练习 评测结果 AAAAAAAAAA
题目名称 Hankson的趣味题 最终得分 100
用户昵称 TARDIS 运行时间 0.309 s
代码语言 C++ 内存使用 0.79 MiB
提交时间 2017-05-22 17:51:23
显示代码纯文本
#include<bits/stdc++.h>
#define COGS
using namespace std;
inline int gcd(int a,int b){
	if (b==0) return a;
	else return gcd(b,a%b);
}
const int maxn=2000010;
int a,b,c,d,n,cnt;
int prime[maxn];
inline bool is_prime(int x){
	int num=floor(sqrt(x));
	for (int i=2;i<=num;i++){
		if (x%i==0) return false;
	}
	return true;
}
inline void getprime(int x){
	cnt=0;
	for (int i=2;i<=x;i++){
		if(is_prime(i)&&x%i==0){
			prime[++cnt]=i;
		}
	}
}
inline void Devide(int x)
{
	cnt=0;
	for(int i=1;i<=sqrt(x);i++)
	{
		if(x%i==0)
		{
			if(i!=1)
			{
				prime[++cnt]=i;
			}
			
			if(x/i!=1&&x/i!=i) prime[++cnt]=x/i; 
		}
	}
} 
inline void deal(int a,int b,int c,int d){
	int ans=0;
	//memset(prime,0,sizeof(prime));
	Devide(c);
	int temp1=d/c;
	int gtemp1=gcd(temp1,c);
	int gtemp2=temp1/gtemp1*c;
	if(c%temp1||c==temp1||c==d){
		if (gcd(temp1,a)==b&&gtemp2==d){
			ans++;
		}
	}
	for (int i=1;i<=cnt;i++){
		int t=prime[i]*temp1;
		int gtemp3=gcd(t,a);
		if (gtemp3!=b) continue;
		gtemp3=gcd(c,t);
		int gtemp4=t/gtemp3*c;
		if (gtemp4==d){
			if (c%t||(c==t&&d==c)||c==d){
				ans++;
			}
		}
	}
	printf("%d\n",ans);
}
inline int Main(){
	#ifdef COGS
	freopen("son.in","r",stdin);
	freopen("son.out","w",stdout);
	#endif
	scanf("%d",&n);
	while(n--){
		scanf("%d%d%d%d",&a,&b,&c,&d);
		deal(a,b,c,d);
	}
	return 0;
}
int main(){;}
int xlm=Main();