#3,#4AC,#1,#2,#5,#6WA,其余TLE(20pts))

P1072 [NOIP2009 提高组] Hankson 的趣味题

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


|