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 が 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 自身が素因数であることを意味するため、リストに追加しています。
-
【Python】ある数の最大の素因数を求めるプログラムの書き方
この記事では、「与えられた整数の最大の素因数を求める」という問題に対する解決方法を、具体的なコード例とともにわかりやすく解説します。 問題文 正の整数 n が与えられたとき、その数の最大の素因数を求めます。 例えば n = 15 の場合、15 は 3 × 5 と素因数分解できるため、答えは 5 となります。 解き方のアプローチ 入力された数を、小さい約数から順番に割っていくことで素因数分解します。 割り切れるたびに、その時点での約数(素因数)を「最大値」として更新していきます。 平方根まで調べれば十分なため、計算量を抑えられます。 実装例(サンプルコード) import math def
-
Pythonプログラム:数の一意な素因数の積を求める方法
はじめに 本記事では、次の問題に対する解き方を学びます。 問題文: 整数 n が与えられたとき、その数が持つ一意な(重複しない)素因数をすべて求め、それらの積を返します。 例: 入力:num = 11 出力:積は 11 説明: 入力された数は 11 で、素因数は 11 のみです。 したがって、その積も 11 となります。 アプローチ1:総当たり法(ブルートフォース) i = 2 から n+1 までの for ループを使い、i が n の約数であるかどうかを確認します。約数であれば、さらに i 自身が素数かどうかを判定し、素数なら積に掛け合わせます。この処理を i が n に達するまで繰り返しま