Python で素因数を見つけるためのブルート フォース アルゴリズムを最適化するにはどうすればよいでしょうか?

Mary-Kate Olsen
リリース: 2024-11-07 19:09:03
オリジナル
234 人が閲覧しました

How can you optimize the brute-force algorithm for finding prime factors in Python?

Python での素因数の検索: 総合ガイド

素因数の決定は、数論の基本的なタスクです。最大の素因数を見つけるアプローチの 1 つは、ブルート フォース アルゴリズムを使用することです。ただし、すべてのアルゴリズムが同じように作成されているわけではありません。

総当たりアルゴリズム

一般的に使用されるアルゴリズムの 1 つは、元の値を均等に分割する数値が見つかるまで段階的に数値をテストすることです。番号。コード例を考えてみましょう。

n = 600851475143
i = 2
while i * i < n:
    while n % i == 0:
        n = n / i
    i = i + 1

print(n)
ログイン後にコピー

このコードは、最大の素因数 600851475143 を検索します。ただし、効率が悪く、完了までに約 0.01 秒かかります。

最適化済みブルート フォース アルゴリズム

ブルート フォース アルゴリズムの改良版により、実行時間を大幅に短縮できます。

def largest_prime_factor(n):
    i = 2
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
    return n
ログイン後にコピー

このアルゴリズムは、i が n の平方根を超えるとすぐに終了します。これにより、多くの不必要な数値のテストが効果的に排除されます。その結果、実行時間が大幅に短縮され、同じ入力に対して約 388 マイクロ秒で完了します。

素因数分解の完了

完全な素数を取得することが目的の場合数値を因数分解するには、アルゴリズムにわずかな変更が必要です。

def prime_factors(n):
    i = 2
    factors = []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            factors.append(i)
    if n > 1:
        factors.append(n)
    return factors
ログイン後にコピー

このアルゴリズムは、見つかった素因数を格納する「factors」と呼ばれるリストを維持します。最後に n が 1 より大きい場合、それは最終的な素因数を示し、リストに追加されます。

結論として、効率的な素因数分解アルゴリズムを選択することがパフォーマンスにとって重要です。最適化された総当たりアルゴリズムにより速度が大幅に向上し、完全因数分解アルゴリズムにより指定された数値の完全な素因数分解が可能になります。

以上がPython で素因数を見つけるためのブルート フォース アルゴリズムを最適化するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!