PS:#9超时0.12s
by Algorithm_ZRF @ 2024-02-18 15:51:38
有没有人能够解释一下:为什么加个快写就50pts了?
CODE(#7-#11TLE)
```cpp
#include <bits/stdc++.h>
using namespace std;
inline void write(int x) {
if (x < 0)putchar('-'), x = -x;
if (x > 9)write(x / 10);
putchar(x % 10 + '0');
return;
}
inline int gcd(int a, int b) {
while (b != 0) {
int tmp = a;
a = b;
b = tmp % b;
}
return a;
}
inline int lcm(int a, int b) {
return (a / gcd(a, b)) * (b / gcd(a, b)) * gcd(a, b);
}
signed main() {
int t;
scanf("%d", &t);
while (t--) {
int cnt = 0, a0, a1, b0, b1;
scanf("%d%d%d%d", &a0, &a1, &b0, &b1);
for (int i = 1; i <= b1; ++i) {
if (gcd(i, a0) == a1 && lcm(i, b0) == b1) {
cnt++;
}
}
write(cnt);
printf("\n");
}
return 0;
}
```
by Algorithm_ZRF @ 2024-02-18 16:10:17
@[Student_Z_5](/user/749055)
by Algorithm_ZRF @ 2024-02-18 20:47:17
@[Algorithm_ZRF](/user/1044048) 改码,实测AC
```cpp
#include <bits/stdc++.h>
using namespace std;
#define int long long //不开longlong 见祖宗
inline int gcd(int a, int b) {
return !b ? a : gcd(b, a % b);//gcd个人写法
}
inline int lcm(int a, int b) {
return a / gcd(a, b) * b; //lcm可简化为此句,先写除法免爆int
}
signed main() {
int t;
cin >> t;
while (t--) {
int cnt = 0, a0, a1, b0, b1;
cin >> a0 >> a1 >> b0 >> b1;
for (int i = 1; i * i <= b1; ++i) { //只需遍历到sqrt(b1)
if (b1 % i)
continue;//头判,少一些不必要的遍历
if (gcd(i, a0) == a1 && lcm(i, b0) == b1) {
cnt++;
}
int k = b1 / i;
if (k==i)
continue;//完全平方数特判
if (gcd(a0, k) == a1 && lcm(b0, k) == b1) {
cnt++;
}
}
cout << cnt << endl;
}
return 0;
}
```cpp
by Student_Z_5 @ 2024-02-18 21:04:29