unsigned long long 整数内のすべての素因数を見つけるにはどうすればよいですか?
質問
数値のすべての素因数を見つけるという課題があります...
数値を受け取り、その数値のすべての素因数を通知する関数を作成する必要があります。例えば:
- n=350 素因数:2 5 5 7
(関数に 0 ~ 18446744073709551615 の範囲の数値を渡します。最大数値は、64 ビットの符号なし long long 整数に収まる最大の数値です。)
正しい解決策はありません
他のヒント
ハードの問題、および量子コンピュータへのすべての研究の主な理由の一つです。 ショアのアルゴリズムのを見てみましょう。この特定のケース(64ビット整数)で、あなたはわずか数分にあなたの実行時間を短縮することができるはずですが、最適化することなく、簡単なブルートフォースは、1000年の年のようなものを取るだろう。
あなたはそれが動作するかどうか(複数回を2からカウントアップし、それぞれの番号を試すような何かを行うことによって、大幅にスピードアップすることができ、あなたは一つの大きな素因数(最大で)の些細なケースを持っていると仮定すると、12は2になり、2、例えば、図3)。あなたが要因を見つけた後、新たなターゲットが素数である場合はその要因とテストであなたの目標数を減らします。
さらにそれをスピードアップするためには、除数の範囲を担当するそれぞれと、複数のスレッド間で処理を行うことができます。あなたが唯一の素数で除算しようとしているので、テストスレッドに素数を提供する、1つまたは複数のスレッドに素数テスターを実行することができます。
あなたが値を提供する人はtricksomeになろうとしていると思う場合は、あなたも、ローエンドでそんなに高くなって素数の密度は、この可能性が高いわけではありません助けを借りものの、レンジダウンの上から検索できますます。
、Xの可能な限り最大の要因ということは、X自体のほかに、Xの平方根ですが、主なものは覚えているために、あなたが要因を見つけるたびに、可能な限り最大の残りの要因は大幅に減少します。