数値の因数分解(オプション2)

合成数の因数分解アルゴリズムのバリアントの1つをご紹介したいと思います。

単純化するために、図1に示す[1]のように、合成数A = 35の残差の行列を考えます。

すでに述べたように[1]、合成数Aのパワー残差の表(図1)には特定の特徴があります。


341341341341341341341341341341341341341341341341341
3342716329日12111391713342716329日12111391713342716329日1211139
329811229日1816224231329811229日1816224231329811229日1816224
311661126131166112613116611261311661126131166112613116611
30251530251530251530251530251530251530251530251530251530251530251530
29日129日129日129日129日129日129日129日129日129日129日129日129日129日129日129日129日1
281472128147212814721281472128147212814721281472128147212814
2729日1312729日1312729日1312729日1312729日1312729日1312729日1312729日1312729日
261161631126116163112611616311261161631126116163112611616
25301525301525301525301525301525301525301525301525301525301525301525
241634111912416341119124163411191241634111912416341119124163411
23422161829日2118932123422161829日2118932123422161829日21189
2229日812229日812229日812229日812229日812229日812229日812229日812229日
21212121212121212121212121212121212121212121212121212121212121212121
20152015201520152015201520152015201520152015201520152015201520152015
191134162411911341624119113416241191134162411911341624119113416
18922112329日3216842118922112329日3216842118922112329日321684
17913111229日31627433117913111229日31627433117913111229日316274
161111611116111161111611116111161111611116111161111611116
15151515151515151515151515151515151515151515151515151515151515151515
14211421142114211421142114211421142114211421142114211421142114211421
1329日2711329日2711329日2711329日2711329日2711329日2711329日2711329日2711329日
12413161729日33112793112413161729日33112793112413161729日3311279
111611116111161111611116111161111611116111161111611116111
103020255151030202551510302025515103020255151030202551510302025
91129日164191129日164191129日164191129日164191129日164191129日16
829日221829日221829日221829日221829日221829日221829日221829日221829日
71428217142821714282171428217142821714282171428217142821714
6161616161616161616161616161616161
52520301015525203010155252030101552520301015525203010155252030
41629日119141629日119141629日119141629日119141629日119141629日11
3927113329日17161341213927113329日17161341213927113329日1716134
248163229日2311229181248163229日2311229181248163229日2311229
1111111111111111111111111111111111

図 1合成数A = 35のべき乗の表。

値が数値Aの約数の倍数である行を除外する場合、残りの値が1である2つの列が必ずあります。 図 1は、番号12、24の列です。

これらの2つの列のうち、最大の列番号は(x-1)(y-1)の積です。ここで、 xyは Aの約数です この場合、列番号24はオイラー関数[2]の値に等しく、その値は
(x-1)*(y-1)=ѱ(n)

Aとオイラー関数ѱ(n)の差は(x + y-1)です。

これらのパターンにより、方程式系を構成できます。

Ѱ(n)=(x-1)*(y-1)
A-ѱ(n)=(x + y-1)
式(1)

順列を使用して、方程式系(1)を2次方程式(2)に還元できます。

y 2- (A-ѱ(n)+ 1)y + A = 0
式(2)

この方程式をうまく解くには、 ѱ(n)だけ欠落しています。

さらに、テーブルの数Aのパワー残差の特性を考慮します(図1)。 逆値の概念を紹介します[3]。 数値の範囲(1、A-1)からcの値を選択し、 cxyの複数の除数がないようにすると、同じ範囲(1、A-1)からの値dが常に存在します。

c * d≡1(mod A)
式(3)

つまり c * d = nA +1 。ここで、 n1〜 (A-2)の値を取ることができます。

表記d = inv(c) 、つまり dcの逆数です。 単純係数xyの積に等しい合成数Aの場合、逆値のペアの数は

(A-(x-1)-(y-1)-1)/ 2
フォーミュラ(4)

表の行(図1)の逆の値は、番号ѱ(n)の列に対して対称に配置されます。

表の列の逆値(図1)は、最初の列の逆値のペアに対して対称に配置されます。

ѱ(n)を見つけるための一連のアクションを検討します。

1.検索範囲を縮小します。 (A-1)から、最も近い整数に計算されたAの平方根の値取得します。 ѱ1によって得られた結果を示します。

2.数値Aの約数xyの倍数ではなく、数値cを選択ます cのパワー残差の重複値の最小数が望ましいです。

3.d = inv(s)を見つけます。 拡張ユークリッドアルゴリズムを使用して見つけることができます[4]。

4.指数1から始まり、 Aの平方根以下の数値mで終わるdのべき乗残差を求めます

5.配列で見つかったべき乗則の残差を見つけ、それをMで示します 配列Mは昇順ソートされ、指数でインデックス付けされます。

6. cremainder 1乗をAで割った余りを計算し、 Mの値と比較します

7.一致するものがない場合、 ѱ1からm引き 、結果の値をѱ1に割り当てます。 次に、一致するまで段落67を繰り返します。

8.一致する場合、配列Mの値に一致する次数インデックスの大きさをѱ1から減算し、結果の値をѱ1に割り当てます。

この場合、 ѱ1 =ѱ(n)です。

仕組みは次のとおりです。 (A-1)= 34 (図1)から35の平方根、つまり 5、29を取得します。 cについては 18を選択します。 inv(18)= 2です。 m = 5の場合、配列M = {2、4、8、16、32}35で割った29の累乗の18の残りは23です。 inv(23)= 32 。 この値は配列内にあり、インデックスは5です。 29から5を引く必要があります。 結果の値24ѱ(n)です。 次に、式(2)のAѱ(n)を代入し、 yを見つけます。 y 1 = 7y 2 = 5

別の例。

2から11次、マイナス1は2047です。
2047 = 23 * 89
2047/3 = 682および剰余1
c = 682、inv(s)= 3
2047の平方根= 45、剰余22。
2047-45 = 2002
m = 20
M = {3、9、27、81、243、729、140、420、1260、1733、1105、1268、1757、1177、1484、358、1074、1175、1478、340}
2002年の682を2047で除算し、残りは1013です。inv(1013)= 1657、配列に一致するものはありません。
2002-20 = 1982
682の1982乗は2047で除算され、残りは524です。inv(524)= 1504、配列に一致するものはありません。
1982-20 = 1962
682の1962乗は2047で除算され、残りは71です。inv(71)= 173、配列には一致がありません。
1962-20 = 1942
682の1942乗は2047で除算され、残りは1623です。inv(1623)= 729、配列に一致があり、インデックスは6です
1942-6 = 1936 =ѱ(n)
y 2- (2047-1936 + 1)y + 2047 = 0
y 2-112y + 2047 = 0
y 1 = 89
y 2 = 23

文学
1.「数字の対称性」、 habrahabr.ru / post / 218053
2.「オイラー関数」、 en.wikipedia.org / wiki / Euler_Function
3.「リターン番号」、 en.wikipedia.org / wiki / Return_Number
4.「公開キー暗号化」、 ikit.edu.sfu-kras.ru / files / 15 / l5.pdf

Source: https://habr.com/ru/post/J270949/


All Articles