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++ で数値を因数分解する方法はおそらく別の問題ですが、各因数分解は元の方程式の解を生成します。[編集: 実際には 2 つの解決策がA*B == Cあり(-A)*(-B) == Cます。

プログラミング言語 C および C++ に関する限り、 を含むのに十分な大きさの型を使用するようにしてください4 * 10^14intしませんので、やってみてくださいlong long

于 2011-06-03T09:20:25.717 に答える
2

2 パラメーター関数があり、特定の定数についてそれを解きたいとします。

これは数学のかなり大きな分野であり、方程式を解くアルゴリズムはおそらく数十種類あります。F<P多くの人が使用する 1 つの重要なアイデアは、点 whereと点 を見つけた場合、F>Pこれら2 つの点の間のどこかで F は P に等しくなければならないという事実です。

根 (またはゼロ、もちろん F'=FP を取ることで変換できます) を見つけるための最も基本的なアルゴリズムの 1 つは、ニュートン法です。それから始めて、より高度なアルゴリズムまで読んでいくことをお勧めします。これは非常に大きな研究分野なので、楽しく読んでください!

ウィキペディアには、出発点として使用できるルート検索アルゴリズムのリストがあります。

于 2011-06-03T09:14:57.747 に答える