为什么要这么长?
```cpp
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
return !b?a:gcd(b,a%b);
}
int lcm(int a,int b){
return 1ll*a*b/gcd(a,b);
}
int main()
{
int t;
cin >> t;
while (t--)
{
int a0,a1,b0,b1,ans=0;
cin >> a0 >> a1 >> b0 >> b1;//一定是b1的因数
for (int i=1;i*i<=b1;++i)
{
if (b1%i==0)
{
if (gcd(i,a0)==a1&&lcm(i,b0)==b1)
{
ans++;
}
int j=b1/i;
if (gcd(j,a0)==a1&&lcm(j,b0)==b1&&j*j!=b1)
{
ans++;
}
}
}
cout << ans;
puts("");
}
}
by zzb1217 @ 2023-09-20 15:59:02
我们可以从样例里知道ans一定是b1的倍数,所以我们暴力是1~n求,但我们发现,只要1~sqrt(b1)就可以得到他的所有因子,在用因子判断即可
by zzb1217 @ 2023-09-20 16:01:06
@[zhouzibo1217](/user/746761)
```cpp
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int _; cin >> _;
while (_ --){
int A0; cin >> A0;
int A1; cin >> A1;
int B0; cin >> B0;
int B1; cin >> B1;
int tmp = B1 / B0;
int ans = 0;
for (int i = tmp; i <= B1; i += tmp){
if (__gcd(i, A0) == A1 && i * B0 / __gcd(i, B0) == B1){
ans ++;
}
}
cout << ans << endl;
}
return 0;
}
```
这样为什么会T两个点啊
by Missdie @ 2023-10-25 21:09:37