1 条题解
-
0
题目挺唬人的,就是让你找到有多少个数是既能整除 ,也能整除 。
显然的:我们可以确定答案的最大值,就是它们的最大公因数。
接下来就直接枚举,从 到 看每个 是否满足条件,这样会超时,因为 可能很大。
令 。
所以我们需要优化这个过程,枚举到 我们每次找两个,一个是小的因数,一个是大的因数(当 ),这样可以把时间降低到 。
时间复杂度
#include <bits/stdc++.h> using u32 = unsigned; using i64 = long long; using u64 = unsigned long long; using i128 = __int128; void solve() { int a, b; std::cin >> a >> b; int t = std::gcd(a, b); int ans = 0; for (int i = 1; i * i <= t; i++) { if (t % i == 0) { if (i != t / i) { ans += 2; } else { ans ++; } } } std::cout << ans << '\n'; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t; std::cin >> t; while (t --) { solve(); } return 0; }
- 1
信息
- ID
- 50
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 107
- 已通过
- 20
- 上传者