因数分解で表される整数の追加は、因数分解と同じくらい難しいですか?参照リクエスト


22

次の結果の参照先を探しています。

因数分解表現で2つの整数を追加することは、通常のバイナリ表現で2つの整数を因数分解するのと同じくらい困難です。

(これはある時点で私が不思議に思っていたものであり、印刷物でようやく見たときに興奮していたので、そこにあると確信しています。)

「因数分解表現に2つの整数を追加する」ことが問題です。2つの数値バツ素因数分解が与えられると、x + yのy素因数分解を出力します。この問題の単純なアルゴリズムは、サブルーチンとして標準バイナリ表現の因数分解を使用することに注意してください。バツ+y

更新:KavehとSadeqの証拠に感謝します。明らかに、より多くの証明が陽気になりますが、参照を見つけるためのより多くの助けを奨励したいと思います。私はそれを他の興味深い、そしてあまり議論されていないアイデアと共に論文で読んだことを思い出しますが、それらの他のアイデアが何であったか、またはその論文が一般的に何であったかを思い出しません。


6
より良いタイトルは、「因数分解によって表される2つの整数の合計を因数分解するのと同じくらい難しいか」と思います。
MS Dousti

1
いい質問です。与えられた整数を因数分解が容易な2つの整数の合計として書くことができるなら、あなたが望むものは次のとおりです。数字が必要な場合は簡単に実行できますが、log n個の数字を記録してもその方法はわかりません。簡単に因数分解できる数のクラスを見る価値があります。ログnログログn
カヴェー

1
MOとMath.SE上のいくつかの関連質問:123
Kaveh

回答:


15

複雑性クラスで(FactSumそれを呼び出すことができます)私たちはこの問題を解決することができると仮定Cが下に閉じているログ -iteration(別名ログイン我々は計算することができるかどうかなど(-bounded再帰)のx * yの*バイナリ関数であるが、我々はできますx 1x log n)を計算し、Pを含む(この最後の条件を弱くすることができます)。ファクタリングがCにも含まれていることを示します。CCログログバツyバツ1バツログnPC

各数値は、2の累乗の合計として記述できることに注意してください。それらはそれぞれ簡単に因数分解できます。ログn2

番号が与えられたら、それをべき乗の合計として書き、次に因数分解表現で各被加数を書き、次にアルゴリズムを使用して因数分解表現でそれらを合計します。結果は、入力数の因数分解になります。

これは、問題のFactSumの反復をするために因数分解を削減できることを示しています。したがって、因数分解はP FactSumにあります(ここで、PN C 1に置き換えることができると 思います)。ログPファクトサムPNC1


10

参照については知りませんが、証拠を思いついたと思います:

入力に2つの因数分解された数値を持つOracle あるとしますO

x=i=1npiαi

そして

y=i=1mqiβi

因数分解を出力します。x+y

にアクセスすると、次の再帰的手順を使用して、多項式時間の任意の数Nを因数分解できます。ON

手順係数(N

  1. N /のような素数を見つけるバツ、およびlet yは= Nを- XN/2バツN1y=Nバツ
  2. が素数でない場合、再帰呼び出しfactor(y)と出力によりyの因数分解を取得しますyyyます。Oバツfactory
  3. その他の出力Oバツy

分析:

十分に大きいNの素数定理により、N /N N 1のます。Nが非常に小さく、この区間に素数が含まれない場合、 Nを簡単に因数分解できます。したがって、手順1に進みます。N/2N1NN

ステップ2では、AKSまたはその他の多項式時間の素数性テストを使用できます。

再帰の数は単純に。これは、各ステップで Nが(少なくとも)半分にカットされるためです。OlgN=O|N|N


PS-1:Goldbachの推測を仮定すると、偶数(および場合によっては奇数)整数の手続きの高速化に役立つ可能性があります。

PS-2:使用される削減はクック削減です。カープ縮小を使用して証明を実行することに興味があるかもしれません。


3
与えられた範囲の素数を効率的に見つけることができればオープンだと思うので、あなたがどうやっているのかわかりません
。– Kaveh

1
@Kaveh:その通りです!いくつかの追加のステップを使用して、が素数である必要がないようにアルゴリズムを変更し、それをyのように因数分解できると思います。または、還元が確率的であると仮定することができます(確率的多項式時間では、与えられた範囲で素数を見つけることができます)。xy
MS Dousti

2
はい、私たちは同じ考えを持っていたと思う、つまり、入力に合計する簡単な因数分解整数を見つけたいと思った、素数を使用しようとした、私は2の累乗を使用した:)オラクルへのクエリの対数よりも少なく、それは興味深い自然数論の質問(数字を因数分解しやすい数の合計として書く)に関連しているようです。
カヴェー

5

この応答は私の以前の答えとは無関係です。コメントで@Kavehの懸念に対処することが目標です。

数字が必要な場合は簡単に実行できますが、log n個の数字を記録してもその方法はわかりません。lognloglogn

同様の懸念がありました:

使用される削減はクック削減です。カープ縮小を使用して証明を実行することに興味があるかもしれません。

(カープ削減は意思決定の問題のためです。ここで、カープ削減とは、単一クエリのクック削減を意味します。非標準の用語でごめんなさい!)


以下の回答は、ここでの議論に基づいています:https : //math.stackexchange.com/questions/54580/factoring-some-integer-in-the-given-interval


この回答では、因数分解から決定論的ポリニアル時間のカープ削減を提供します、因数分解によって表される2つの整数の合計の因数分解ます。ただし、1つ問題があります。証明の過程で、次の数論的仮定を使用します。

Cramérの予想:連続する2つの素数およびp n + 1に対して、p n + 1p n = O log 2 p n)があります。pnpn+1pn+1pn=O(log2pn)

してみましょう入力する、とlet のn = | N | = O log N 。Cramérの予想では、十分に大きいNに対して、区間[ N log 3 N N ]に少なくとも1つの素数があります。この間隔の長さはlog 3 N = O n 3です。したがって、この素数は総当たり決定論的な多項式時間で見つけることができます。Nn=|N|=O(logN)N[Nlog3N,N]log3N=O(n3)

x[Nlog3N,N]y=Nx

0ylog3N|y|=O(loglogN)=O(logn)y

(x,y)N=x+y


Sadeqに感謝しますが、条件付きの結果は私が求めていたものではありませんでした。ps:数字の興味深い表現に興味があり、あなたの答えから得られる表現(大きな素数を取り出す)は私にはあまり興味深く見えません。私が面白いと思うものの風味を与えるために:すべての自然数は4つの正方形の合計です
カヴェー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.