3

我的数学有问题:

假设我们有一个函数:F(x,y) = P; 我的问题是:为这个函数计算合适的 (x,y) 图的最有效方法是什么?这意味着我自己不需要坐标,但我需要其中的一些。P 在一个范围内: [0 ; 10^14]。“x”和“y”是整数。是使用蛮力解决还是有一些高级技巧(数学/编程语言(C,C++))足够快地解决这个问题?

更具体地说,函数是:x*y - ((x+y)/2) + 1。

4

2 回答 2

10

x*y - ((x+y)/2) + 1 == P相当于(2x-1)(2y-1) == (4P-3)

因此,您基本上是在寻找4P-3. 如何在 C 或 C++ 中对数字进行因式分解可能是一个不同的问题,但每个因式分解都会产生原始方程的解。[编辑:实际上有两种解决方案,因为如果A*B == C那么当然(-A)*(-B) == C也是]。

就编程语言 C 和 C++ 而言,只要确保使用的类型足够大,可以包含4 * 10^14. int不会,所以试试long long

于 2011-06-03T09:20:25.717 回答
2

您有一个双参数函数,并希望针对给定常数求解它。

这是数学中一个相当大的领域,可能有几十种算法可以解决你的方程。许多人使用的一个关键思想是,如果你找到一个点 whereF<P和一个点F>P,那么在这两个点之间的某个地方,F 必须等于 P。

寻找根(或零,您当然可以通过 F'=FP 转换为)的最基本算法之一是牛顿法。我建议你从这个开始,然后阅读更高级的算法。这是一个非常大的研究领域,阅读愉快!

维基百科有一个根查找算法列表,您可以将其用作起点。

于 2011-06-03T09:14:57.747 回答