Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで整数のすべての素因数をソート順に求めるプログラム

1より大きい整数 n が与えられたとき、その数のすべての素因数を見つけ、昇順(ソートされた順序)で返すことを考えます。

任意の整数は素数の積として表すことができ、これらの素数がその数の素因数となります。なお、同じ素因数が複数回現れる場合もあります(例:12 = 2 × 2 × 3)。

例えば、入力が 42 の場合、出力は [2, 3, 7] となります。

解法のアプローチ

この問題は「試し割り法」と呼ばれる手法で解くことができます。手順は以下の通りです。

  • 結果を格納する新しいリスト res を用意する
  • n が 2 で割り切れる間、以下を繰り返す
    • res の末尾に 2 を追加する
    • n := n ÷ 2 の商とする
  • i を 3 から √n まで 2 ずつ増やしながら、以下を繰り返す
    • n が i で割り切れる間、以下を繰り返す
      • res の末尾に i を追加する
      • n := n ÷ i の商とする
  • もし n > 2 ならば、
    • res の末尾に n を追加する
  • res を返す

それでは、実際の実装を見て理解を深めましょう。

実装例

class Solution:
    def solve(self, n):
        res=[]
        while n%2==0:
            res.append(2)
            n//=2
        for i in range(3,int(n**.5)+1,2):
            while n%i==0:
                res.append(i)
                n//=i
        if n>2:
            res.append(n)
        return res
ob = Solution()
print(ob.solve(42))

入力

42

出力

[2, 3, 7]

アルゴリズムのポイント

このアルゴリズムでは、小さい素数から順に割っていくため、結果は自動的に昇順に並びます。また、約数を調べる範囲を √n までに限定することで、計算量は O(√n) に抑えられます。ループ終了後に n が 2 より大きい場合は、残った n 自身が素因数であることを意味するため、リストに追加しています。

  1. 【Python】ある数の最大の素因数を求めるプログラムの書き方

    この記事では、「与えられた整数の最大の素因数を求める」という問題に対する解決方法を、具体的なコード例とともにわかりやすく解説します。 問題文 正の整数 n が与えられたとき、その数の最大の素因数を求めます。 例えば n = 15 の場合、15 は 3 × 5 と素因数分解できるため、答えは 5 となります。 解き方のアプローチ 入力された数を、小さい約数から順番に割っていくことで素因数分解します。 割り切れるたびに、その時点での約数(素因数)を「最大値」として更新していきます。 平方根まで調べれば十分なため、計算量を抑えられます。 実装例(サンプルコード) import math def

  2. Pythonプログラム:数の一意な素因数の積を求める方法

    はじめに 本記事では、次の問題に対する解き方を学びます。 問題文: 整数 n が与えられたとき、その数が持つ一意な(重複しない)素因数をすべて求め、それらの積を返します。 例: 入力:num = 11 出力:積は 11 説明: 入力された数は 11 で、素因数は 11 のみです。 したがって、その積も 11 となります。 アプローチ1:総当たり法(ブルートフォース) i = 2 から n+1 までの for ループを使い、i が n の約数であるかどうかを確認します。約数であれば、さらに i 自身が素数かどうかを判定し、素数なら積に掛け合わせます。この処理を i が n に達するまで繰り返しま