-3

つまり、interviewstreet.comという名前のWebサイトがあります。ここでは、難しいプログラミングの問題を見つけることができます。残念ながら、質問を表示するにはログインする必要があります。

これが私が解決しようとしている問題の簡単な説明です:

方程式(1/x) + (1/y) = 1/N!の正の積分解の数を求めます(1 x n階乗を読み取ります)1000007を法とする正の積分解の数である単一の整数を出力します。

たとえば、の場合、次N=3のように(x,y)なります。、、、、、、、、。またはそう思った。(7,42)(9,18)(8,24)(12,12)(42,7)(18,9)(24,8)

特にこの問題を解決したあなたを助けてください。問題の方程式をコーディングしました。アルゴリズムに問題があります。最初の10個の整数の出力を要求できますか?つまり、、、N=2...アルゴリズムの欠陥を見つけることができるようにN=3、ありがとう :)N=4N=10

編集:ああ、それは私とこれを解決しようとしている人々の楽しみを台無しにするので、解決策のコードを投稿しないでください:)

4

4 に答える 4

3

私の解決策はインタビューストリートに受け入れられました。最初に、私の解決策は受け入れられませんでしたが、@ Reinardus Surya Pradhitの投稿を見た後、ペア(x、y)が2回カウントされる場合は、少し変更して成功しました。ここでは解決策を投稿しません。 、しかし私はあなたにN = 3-> N=10からのすべての変数のテストケースを伝えることができますここで結果

N=3: 9
N=4: 21
N=5: 63 
N=6: 135
N=7: 405
N=8: 675
N=9: 1215
N=10: 2295

私のヒントは:Nを表現してみてください!のような素数でp1^q1 * p2^q2 * ... * pn^qn

于 2012-04-26T19:28:19.823 に答える
2

今のところの特殊な形式を無視してN!、方程式を解く

1/k = 1/x + 1/y

書くx = k + d。それで

1/y = 1/k - 1/(k + d) = d/(k*(k+d))

そこからソリューションの数を決定するタスクは、読者の演習として残されています。

于 2011-12-28T01:41:38.933 に答える
0

丸め誤差を回避するために整数のみを処理することが重要です。方程式を次のように再配置することから始めます。

N!(X+Y)=XY

そこからどこへ行けばいいのかわからない。

于 2011-12-28T01:25:14.677 に答える
0

最終結果に到達するには、(2 * q1 + 1)*(2 * q2 + 1)*(2 * q3 + 1)を計算する必要があります...しかし、結果をどのように保存するか、たとえばN=32327とすると結果の上にオーバーフローします。私が間違っている場合は私を訂正してください

于 2012-05-29T20:50:12.640 に答える