在C++中,寻找符合某个公式的所有正整数对的最优方法是什么?例如:
a^2 * b = 16;//a & b MUST be positive INT.
我该如何找到满足公式的所有a和b的组合?
编辑:为了更清晰,这只是一个例子。实际上,我有一个a^2 * b = c的公式,其中c在使用for循环递增,我需要找到每个满足此方程条件的正整数对(a,b)。
(a,b)
,使得方程式 a^2 * b = c
成立,其中 c
也是一个正整数。c
是一个完全平方数的倍数。因此,我们首先要找到所有能够整除 c
的完全平方数。显然,当 a=1, b=c
时,方程式成立,因此我们知道每个值都至少有一个解。在找到每个 a
后,我们通过将 c
除以每个 a^2
来得到其对应的 b
。std::vector<std::pair<int, int> > solve(int c) {
std::vector<int> a;
for (int i = 1; i * i <= c; ++i)
if (c % (i*i) == 0) a.push_back(i);
std::vector<std::pair<int, int> > solutions;
solutions.reserve(a.size());
for (std::vector<int>::iterator it = a.begin(); it != a.end(); ++it) {
const int& a = *it;
solutions.push_back(std::pair<int, int>(a, c / (a*a)));
}
return solutions;
}
c = 7! = 5040
的解决方案。 点击这里查看实例。找到c的因数,然后找到使用三个值的子集,其中两个值相同。
(a^2)*b = 16
(我的理解)还是a^(2*b) = 16
? - didierc