オイラーの因数分解法は、数を 2 つの異なる方法で 2 つの平方の和として表すことによって因数分解する手法です。たとえば、数はまたは と表すことができ、オイラーの因数分解法では となります。




奇数の正の整数の 2 つの異なる表現が因数分解につながるという考えは、マリン・メルセンヌによって最初に提案されたようです。しかし、この考えが広く利用されるようになったのは、100 年後のオイラーによるものでした。現在では彼の名前が付けられているこの方法の最も有名な利用法は、数を因数分解したことでした。この数は、主要な素数判定では擬素数ではないにもかかわらず、以前は素数であると考えられていたようです。

オイラーの因数分解法は、因数が互いに近くない整数に対してはフェルマーの因数分解法よりも効果的であり、2 つの平方の和としての数の表現をかなり簡単に見つけることができる場合は、試行除算よりもはるかに効率的になる可能性があります。2 つの平方の和としての数の表現を見つけるために使用される方法は、フェルマーの因数分解法で平方の差を見つける方法と基本的に同じです。
欠点と制限
オイラーの因数分解法の大きな欠点は、 素因数分解で奇数乗になる 4 k + 3 形式の素因数を持つ整数の因数分解には適用できないことです。このような数は 2 つの平方数の和になることはありません。4 k + 1 形式の奇数の合成数でさえ、4 k + 3形式の 2 つの素数の積になることが多く (例: 3053 = 43 × 71)、これもオイラー法では因数分解できません。
この適用範囲の制限により、オイラー因数分解法はコンピュータ因数分解アルゴリズムには不向きとなっています。ランダムな整数を因数分解しようとするユーザーは、問題の整数にオイラー法が実際に適用できるかどうかを知る可能性は低いからです。オイラー法を適用できることがわかっている特殊な数に使用するためのコンピュータアルゴリズムにオイラー法を開発する試みがなされたのは、ごく最近のことです。
理論的根拠
ブラフマグプタ・フィボナッチの等式は、2 つの平方の和の積は 2 つの平方の和であることを示しています。オイラーの方法はこの定理に依存していますが、 2 つの平方の和の積として
求めると、逆と見なすことができます。

まず推測すると

そして両辺を因数分解すると
(1)
ここで、ととすると、を満たす
定数が存在する。


、
、
、
、
これらを式(1)に代入すると、

共通因数を消去すると

ここで、とが互いに素な数のペアである
という事実を用いて、



それで




私たちは今それを見ています
ブラフマグプタ・フィボナッチの等式を適用すると、

各因数は2つの平方数の和なので、そのうちの1つは必ず偶数、つまりまたは のいずれかを含む必要があります。一般性を失うことなく、ペアが偶数であると仮定します。因数分解は次のようになります。




実例
以来:
上記の式から次のようになります。
したがって、



擬似コード
関数 Euler_factorize(int n) -> list[int]
is_prime(n)ならば
print("数値は因数分解できません")
終了関数
a=1 から a=ceiling(sqrt(n)) までの for ループ
b2 = n - a*a
b = 床(平方根(b2))
b*b==b2の場合
a、b を保存してループを中断する
a*a+b*b!=nならば
print("n を平方和として表す式が見つかりませんでした")
終了関数
c=a+1 から c=ceiling(sqrt(n)) までの for ループ
d2 = n - c*c
d = floor(sqrt(d2))
d*d==d2ならば
c、d を保存しながらループを中断する
c*c+d*d!=nの場合
print("n の二乗和の 2 番目の式が見つかりませんでした")
終了関数
A = ca、B = c+a
C = bd、D = b+d
k = GCD(A,C)//2、h = GCD(B,D)//2
l = GCD(A,D)//2、m = GCD(B,C)//2
係数1 = k*k + h*h
係数2 = l*l + m*m
リスト[因子1、因子2]を返す
参考文献
- オーレ、オイステイン (1988)。「オイラーの因数分解法」。数論とその歴史。クーリエ社。pp. 59–64。ISBN 978-0-486-65620-5。
- マッキー、ジェームズ (1996)。「オイラー因数分解法を因数分解アルゴリズムに変換する」。ロンドン数学会報。4 (28): 351–355。doi :10.1112/ blms /28.4.351。