私はInterview Streetの "Unfriendly Numbers"パズルに取り組んでいます。このパズルにどのようにアプローチしますか? (番号のユニークな要素を見つけること)
それはこのように書き:指定された整数にのみ一意である要因を見つけ、整数、および整数の別のリストを考えると
、および整数の他のリストと共有されていません。
に設定1(Yセット)である(そしてnは所定の数である)場合:
∃Y{Z | N%のZ = 0}基本的
:Yは、すべてのZのためにそこにありますここで、zはn%zが0の数です。
他の数字のリストのすべての要素を含むセットからYの差を求めます。
どのようにこれにアプローチしますか?
整数nの係数を見つける?他の数字のすべての要因だけでなく、非ユニークな要因を取り除く?
あなたはnの因子を見つけて、それらを使って他の数を分け、非固有のものを除外しますか?
番号を考慮せずに行う方法はありますか?
これまでのところ、PollardのRhoのTrial Division、PollardのRhoのBrentのバリエーション、Fermatの分解法を使用しました。私はまた、Lucas-Lehmer素数性テストとユークリッドGCDを利用しました。
これまでのところ、何もせず、間違った回答や期限を超過したものだけです。知られている解決策はホイールプライム篩に関係すると思われますが、私はそれが何であるか不明です。
ありがとうございました。
以前の分解の解法はどれくらい早かったのですか?整数Nの因数分解は、O(sqrt(N))時間で行うことができます。 –
うん、フェルマーのやり方は、(試行分割後の)最も遅いように思えたが、素数の数をテストすることは、それを遅くするようにも見えた。 もし私が素数性テストを適用せず、反復因子が発見されたときにいつもfermatのメソッドを使用してループを止めれば、すべての時間が制限時間に達しました。問題があるだけで、ループが途中で止まった可能性があるので、すべての答えが間違っていました。 ブレント/ポラードの方法は速いと思われましたが、問題は因数分解をいつ停止するかを知っていると思います。素数テストを適用して停止するタイミングを判断すると、速度が低下します。 –
(続き)時間制限を超えてしまうかもしれませんが、私はそうではありません。私は間違った答えを得る。 おそらく、私は素因数分解を見つけて、どういうわけか....そこからすべての正常な因子を見つけるべきでしょうか? –