数の約数の最小合計を求めるJavaプログラム
ある整数の約数の最小合計を求めるには、素因数分解を利用するのが効果的です。合成数を素因数に分解すると、その和は必ず元の数以下になるため、素因数ごとに足し合わせた値が最小の合計となります。以下に、この考え方を実装したJavaコードを示します。
サンプルコード
public class Demo {
static int minimum_sum(int num){
int my_sum = 0;
for (int i = 2; i * i <= num; i++){
while (num % i == 0){
my_sum += i;
num /= i;
}
}
my_sum += num;
return my_sum;
}
public static void main(String[] args){
int num = 350;
System.out.println("The minimum sum of factors of the number are ");
System.out.println(minimum_sum(num));
}
}実行結果
The minimum sum of factors of the number are 19
コードの解説
Demo クラスには、静的メソッド minimum_sum が定義されています。このメソッドは、まず合計値を格納する変数を0で初期化します。その後、2から順に「i × i が対象の数以下である間」ループを回し、数が i で割り切れる限り、i を合計に加算しながら数を i で割っていくことで素因数分解を行います。
ループ終了後、残った数(1より大きい場合はそれ自体が素因数)を合計に加算し、結果を返します。試し割り法では平方根まで確認すれば十分なため、計算量を抑えられる点もポイントです。
main メソッドでは、対象となる数値として 350 を定義し、それを引数として minimum_sum メソッドを呼び出しています。350 は 2 × 5 × 5 × 7 と素因数分解できるため、最小合計は 2 + 5 + 5 + 7 = 19 となり、その結果がメッセージとともにコンソールに出力されます。
-
Pythonで数の偶数の約数の合計を求めるプログラムの実装方法
本記事では、以下の問題文に対する解決策について学びます。問題文整数 n が与えられたとき、その数の偶数の約数(偶因子)の合計を求めることが課題です。この問題を解くには、まず奇数の約数をすべて除外する必要があります。入力された数が奇数の場合、偶数の約数は一つも存在しないため、直接 0 を返します。そうでない場合は、以下のコードで示すアプローチに従います。アルゴリズムの考え方このアプローチでは素因数分解を活用します。約数の合計は「各素因数の冪乗の和の積」として表せるという性質を利用します。偶数の約数のみを対象とするため、素因数 2 の部分については 20(つまり 1)を除外し、21 以降の項だけを
-
Pythonで数の因子の最小合計を求めるプログラム|素因数分解の考え方
本記事では、与えられた整数について、積が元の数と等しくなる因子の組み合わせの中から合計が最小となる値を求める方法を、Pythonのコード例とともに解説します。 問題定義 入力として1つの整数が与えられます。この数を複数の因子の積として表したとき、因子の合計が最小になるケースを求めてください。 すべての因子の組み合わせを網羅的に調べて合計を比較する方法もありますが、実はもっとシンプルで効率的なアプローチが存在します。 考え方:素因数の合計が最小になる 鍵となるのは次の性質です。積が一定の値になるとき、因子の合計が最小になるのは、すべての因子を素数まで分解した場合(素因数分解した場合)です。