整数のリストがペアワイズ互いに素であるかどうかをチェックするための効率的なアルゴリズムはありますか、またはより一般的なアルゴリズムが利用可能な最良のオプションでしょうか?
整数のリストがペアワイズ互いに素であるかどうかをチェックするための効率的なアルゴリズムはありますか、またはより一般的なアルゴリズムが利用可能な最良のオプションでしょうか?
回答:
最初に、互いに素な整数に関する2つの事実:
このことから、積が最小公倍数に等しい場合、一連の異なる整数はペアワイズな素素であることがわかります。
次のIDを使用して、最小公倍数を計算できます。
あなたが持っていると仮定すると、と数字のkはそれぞれ数字、乗算/ 2つの数値を改造/除あるO (1 )、その後、(またはしないことがあります機種によっては良い仮定かもしれません):
したがって、アルゴリズム全体の時間の複雑さはです。
はい。数値の各ペアをチェックする素朴なアプローチでは、2次時間がかかりますが、より効率的なアルゴリズムがあります。次のペーパーで説明されているほぼ線形の時間アルゴリズムがあります。
ダニエルJ.バーンスタイン。本質的に線形時間でコプライムに因数分解します。Journal of Algorithms 54(2005)、1〜30。
https://cstheory.stackexchange.com/q/3393/5038も参照してください。それは、あなたが期待することと同じくらい効率的です。
これがあなたの状況にどのように役立つかを明確にするために、素数の基底を見つけて、各要素を基底に対して因数分解したら、それらがペアワイズ素数であるかどうかを確認することは簡単です:それらがペアワイズ素数でない場合、いくつかのペアは共通になります因数であり、それはcoprime基底にある因数であり、両方の因数分解に存在します。2つ以上の数の因数分解に存在する共通の因子がない場合、その数はペアワイズ素素であることがわかります。因数分解を行うと、複数の因数分解に数値があるかどうかを線形時間で簡単にチェックできます。
Factoring over a coprime base
関係しているのかわかりchecking if a list of integers is pairwise coprime
ません。