Pythonプログラムで数の偶数の約数の合計を求める方法
この記事では、以下の問題文に対する解決策について詳しく解説します。
問題文:ある数が与えられたとき、その数のすべての偶数の約数(因子)の合計を求めて表示します。
アプローチ
まず、与えられた数が奇数であるかどうかを確認します。奇数には偶数の約数が存在しないため、その場合は 0 を返します。
数が偶数である場合は、実際の計算に進みます。ここでのポイントは、20(つまり1)以外のすべての項を掛け合わせることで、偶数の約数の合計が得られるという点です。
偶数の約数からすべての奇数を取り除くために、20 に相当する「1」を無視します。この処理を行うことで、残るのは偶数の約数のみとなります。なお、2 は唯一の偶数の素数であることに注意してください。
それでは、実際の実装を見ていきましょう。
実装例
# mathモジュールをインポート
import math
# n のすべての偶数の約数の合計を返す関数
def sumofevenFactors(n) :
# n が奇数の場合
if (n % 2 != 0) :
return 0
# 走査開始
res = 1
for i in range(2, (int)(math.sqrt(n)) + 1) :
# i が n を割り切る場合
count = 0
curr_sum = 1
curr_term = 1
while (n % i == 0) :
count = count + 1
n = n // i
# ここで 2^0(つまり1)を除外し、
# 残りの約数のみを対象とする
if (i == 2 and count == 1) :
curr_sum = 0
curr_term = curr_term * i
curr_sum = curr_sum + curr_term
res = res * curr_sum
# n が素数として残った場合
if (n >= 2) :
res = res * (1 + n)
return res
# メイン処理
n = 22
print(sumofevenFactors(n))
出力結果
24
動作の解説
例として n = 22 の場合を考えてみます。22 の約数は「1, 2, 11, 22」であり、このうち偶数の約数は「2」と「22」です。そのため、合計は 2 + 22 = 24 となり、プログラムの出力と一致します。
すべての変数と関数は、上記のコードのようにグローバルスコープで宣言されています。
まとめ
この記事では、Pythonを使用して、与えられた数の偶数の約数の合計を効率的に求める方法を学びました。素因数分解の考え方を応用することで、全ての約数を列挙することなく計算できる点が大きな特徴です。
-
Pythonで数の偶数の約数の合計を求めるプログラムの実装方法
本記事では、以下の問題文に対する解決策について学びます。問題文整数 n が与えられたとき、その数の偶数の約数(偶因子)の合計を求めることが課題です。この問題を解くには、まず奇数の約数をすべて除外する必要があります。入力された数が奇数の場合、偶数の約数は一つも存在しないため、直接 0 を返します。そうでない場合は、以下のコードで示すアプローチに従います。アルゴリズムの考え方このアプローチでは素因数分解を活用します。約数の合計は「各素因数の冪乗の和の積」として表せるという性質を利用します。偶数の約数のみを対象とするため、素因数 2 の部分については 20(つまり 1)を除外し、21 以降の項だけを
-
Pythonで数の因子の最小合計を求めるプログラム|素因数分解の考え方
本記事では、与えられた整数について、積が元の数と等しくなる因子の組み合わせの中から合計が最小となる値を求める方法を、Pythonのコード例とともに解説します。 問題定義 入力として1つの整数が与えられます。この数を複数の因子の積として表したとき、因子の合計が最小になるケースを求めてください。 すべての因子の組み合わせを網羅的に調べて合計を比較する方法もありますが、実はもっとシンプルで効率的なアプローチが存在します。 考え方:素因数の合計が最小になる 鍵となるのは次の性質です。積が一定の値になるとき、因子の合計が最小になるのは、すべての因子を素数まで分解した場合(素因数分解した場合)です。