なぜ大きな整数を因数分解するのが難しいと考えられますか?


17

私はどこかで、最も効率的なアルゴリズムが時間で因子を計算できることを読みましたが、私が書いたコードは、除算とモジュラスの速さに応じて、または場合によってはです。どこかで誤解したことは確かですが、どこにあるのかわかりません。擬似コード形式で記述しました。O(exp((64/9b)1/3(logb)2/3)O(n)O(nlogn)

function factor(number) -> list
    factors = new list
    if number < 0
        factors.append(-1)
        number = -number
    i = 2
    while i <= number
        while number % i == 0
            factors.append(i)
            number /= i
        i++
    return factors

3
Googleの「擬似多項式」。
ラファエル

そのアルゴリズムは実際には非常に低速です-数値が素数の場合、ループは(number)回繰り返します。sqrt(数)の反復を回避できる非常に単純な引数があります。
gnasher729

回答:


26

数値とを表すのに必要なビット数を混同しています。ここで、を表すのに必要なビット数です()。これは大きな違いになります。 -timeアルゴリズムはビットの数が指数関数的に- -timeアルゴリズム。これに対して、見つけた「効率的な」アルゴリズムの実行時間は、で準指数関数的です。nnb=nblgnO(n)O(2b)b

例:(2百万)を考えます。その後、ビット数の表現に十分である。したがって、であるアルゴリズムは、であるアルゴリズムよりもはるかに高速になります。アルゴリズム、すなわち、非常に遅く、後者のカテゴリーに入ります。n=2,000,000b=21nO(2b1/3)O(2b)O(n)

https://en.wikipedia.org/wiki/Integer_factorizationを参照してください


1
私はそれがそのような単純なものであることを知っていました。
EnderShadow

3
@EnderShadow:また、現在利用可能なハードウェアを使用してファクタリングが難しいと考えられ、RSA暗号化などで使用される数値の種類は、(つまり)程度です。 。演習として、コンピューターがアルゴリズムを1秒あたり10億回の反復で実行できると仮定して、を因数するのにかかる年数を計算します。(最初の反応が「正しくない!」である場合、おそらく正しく計算されているでしょう。)b>1,000n>21,000O(n)n21,000
Ilmari Karonen

1

ここには、コードに関する一般的な質問と特定の質問の2つの質問があります。特定の1つは他の回答で処理されます。ファクタリングの複雑さに関するタイトルの一般的な質問は非常に深いです。残念ながら、ファクタリングが「ほとんどの状況」の「多くの専門家が試みて失敗した」以外のPの外側にあるという強力な科学的証拠はなく、一部の専門家はそれがP 複雑性理論の最も重要な(そして解決が非常に難しい)未解決の問題の1つと見なされています。何十年もの「重度の攻撃」の後、最高のアルゴリズムは指数関数的です。ファクタリングの複雑さは、PとNPの「間に」存在することが知られているが、これまでのところ分類されていない「いくつかの例外的な問題」の1つです。

指摘されているように、1980年代半ばにRSA暗号システムで暗号化セキュリティが前提に依存するように(「大まかに」)使用されるまで、複雑さはそれほど問題ではありませんでした(他の2つの「厳密に推奨されない」関連データポイント:P時間量子因数分解と素数性テストのためのShorsアルゴリズムは、有名/有名なAKSアルゴリズムの 2000年代初期にPであることが証明されました。)その中の準多項式時間(P≠NPを仮定し、NPの完了が有する完全NPよりも弱い、バウンド低い指数時間)が、依然として技術的に「硬いです」。

これまでのところ、この重要なサブjに関する素晴らしい調査は見つかりませんでした。しかし、また参照してください


別の可能性のある「エッジケース」シナリオとして考えられるのは、因数分解がPにある可能性があるが、実行可能なアルゴリズムがまだないということです。別名銀河アルゴリズム
vzn

RSAは、2つの大きな素数の積を因数分解することについて言及する必要があります(誰かが素数を知っていて、それを乗算し、他の誰かが積を与えられ、素数を見つけることになっている場合)。2つの大きな素数の積を因数分解できるアルゴリズムが存在する可能性がありますが、2つを超える大きな素数の積は分解できない可能性があります。大きい素数(ただし、事前に大きい素数であることがわかっていない)の因数分解を多項式時間で行うことができるように。
-gnasher729
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.