【Java】数値の偶数約数の合計を求めるプログラムの書き方
ある数値の偶数約数(偶数の因数)の合計を求めるためのJavaコードは以下の通りです。
サンプルコード
import java.util.*;
import java.lang.*;
public class Demo{
public static int factor_sum(int num){
if (num % 2 != 0)
return 0;
int result = 1;
for (int i = 2; i <= Math.sqrt(num); i++){
int count = 0, current_sum = 1;
int current_term = 1;
while (num % i == 0){
count++;
num = num / i;
if (i == 2 && count == 1)
current_sum = 0;
current_term *= i;
current_sum += current_term;
}
result *= current_sum;
}
if (num >= 2)
result *= (1 + num);
return result;
}
public static void main(String argc[]){
int num = 36;
System.out.println("The sum of even factors of the number is ");
System.out.println(factor_sum(num));
}
}出力結果
The sum of even factors of the number is 78
コードの解説
Demoというクラスの中に、factor_sumというメソッドが定義されています。このメソッドは、引数として渡された数値の約数の中から偶数のものだけを合計し、その結果を戻り値として返します。
まず、入力された数値が奇数である場合は偶数約数が一つも存在しないため、即座に0を返します。その後、素因数分解の考え方を利用し、2から√numまでの整数で順番に割り切れるかどうかを確認していきます。約数の総和を効率的に求めるために、各素因数ごとに「1 + p + p² + … + pⁿ」という等比数列の和を計算し、それらを掛け合わせる手法が用いられています。特に2の累乗については、最初の「1」を除外することで、偶数約数のみを対象とした合計を実現しています。
mainメソッドでは、偶数約数を求めたい数値(ここでは36)が定義され、その数値に対してfactor_sumメソッドが呼び出されます。36の偶数約数は2、4、6、12、18、36であり、これらの合計は78となります。最後に、結果を示すメッセージがコンソールに出力されます。
このアルゴリズムの計算量はO(√n)です。すべての約数を一つずつ確認する単純な方法(O(n))と比較して、大きな数値に対しても高速に動作する点が大きな特徴といえます。
-
Pythonで数の偶数の約数の合計を求めるプログラムの実装方法
本記事では、以下の問題文に対する解決策について学びます。問題文整数 n が与えられたとき、その数の偶数の約数(偶因子)の合計を求めることが課題です。この問題を解くには、まず奇数の約数をすべて除外する必要があります。入力された数が奇数の場合、偶数の約数は一つも存在しないため、直接 0 を返します。そうでない場合は、以下のコードで示すアプローチに従います。アルゴリズムの考え方このアプローチでは素因数分解を活用します。約数の合計は「各素因数の冪乗の和の積」として表せるという性質を利用します。偶数の約数のみを対象とするため、素因数 2 の部分については 20(つまり 1)を除外し、21 以降の項だけを
-
Pythonで数の因子の最小合計を求めるプログラム|素因数分解の考え方
本記事では、与えられた整数について、積が元の数と等しくなる因子の組み合わせの中から合計が最小となる値を求める方法を、Pythonのコード例とともに解説します。 問題定義 入力として1つの整数が与えられます。この数を複数の因子の積として表したとき、因子の合計が最小になるケースを求めてください。 すべての因子の組み合わせを網羅的に調べて合計を比較する方法もありますが、実はもっとシンプルで効率的なアプローチが存在します。 考え方:素因数の合計が最小になる 鍵となるのは次の性質です。積が一定の値になるとき、因子の合計が最小になるのは、すべての因子を素数まで分解した場合(素因数分解した場合)です。