04 关于奇数的等式
题目分析/解题思路
暴力枚举 x, y, z 的话我们的时间复杂度为 O(m^3/8),这个时间复杂度有些紧张,我们考虑变换原式来降低时间复杂度。
所以我们可以发现我们只需要枚举前两个数即可,现在算法的时间复杂度为O(m^2/4)。
代码:
#includeusing namespace std; tuple f(int n, int m) { for (int i = 1; i <= m; i += 2) for (int j = i + 2; j <= m; j += 2) { int x = i * j * n; int y = 3 * i * j - n * (i + j); if (x % y) continue; int k = x / y; if (k > m or k <= j) continue; return {i, j, k}; } return {0, 0, 0}; } int main() { cin.tie(nullptr)->sync_with_stdio(false); int n, m; cin >> n >> m; auto [x, y, z] = f(n, m); if (x > 0) cout << x << ' ' << y << ' ' << z << 'n'; else cout << "No solution in (3, " << m << "].n"; return 0; }



