2021.08.12 最大公因数、最小公倍数

[P1072 NOIP2009 提高组] Hankson 的趣味题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

int t,a0,a1,b0,b1;

inline int read(){
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')w=-1;
		ch=getchar();
	}
	while(ch<='9'&&ch>='0'){
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*w;
}
int gcd(int x,int y){
	return y==0?x:gcd(y,x%y);
}

int main(){
	t=read();
	while(t--){
		a0=read();a1=read();b0=read();b1=read();
		int ai=a0/a1,bi=b1/b0;
		int ans=0;
		for(int i=1;i*i<=b1;i++){
			if(b1%i==0){
				if(i%a1==0&&gcd(i/a1,ai)==1&&gcd(bi,b1/i)==1)++ans;
				int ii=b1/i;
				if(i==ii)continue;
				if(ii%a1==0&&gcd(ii/a1,ai)==1&&gcd(bi,b1/ii)==1)++ans;
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}