C++で数値の偶数の素因数の合計を効率的に求める方法
この記事では、C++を使用して、ある数値の偶数の素因数の合計を効率的に求める方法を解説します。まず具体例として、n = 480という数値を考えてみましょう。480の素因数は 2, 2, 2, 2, 2, 3, 5 です。ここで偶数となる素因数は2のみなので、その合計は 2+2+2+2+2 = 10 となります。
なお、素数の中で偶数なのは「2」だけであるため、この問題は実質的に「数値が2で何回割り切れるかを数え、その回数×2を求める」ことと同じです。この性質を利用すると、非常にシンプルなアルゴリズムで解くことができます。
解法のポイント
- 数値が2で割り切れる間は、その都度合計に2を加算し、数値を2で繰り返し割っていく。
- 2による割り算が終わった時点で、残りの数値は必ず奇数になります。したがって、それ以降に現れる素因数(3, 5, 7など)はすべて奇数であるため、無視して構いません。
それでは、処理の流れをより明確にするために、アルゴリズムを確認してみましょう。
アルゴリズム
sumEvenPrimeFactors(n):
begin
sum := 0
while n is divisible by 2, do
sum := sum + 2
n := n / 2
done
end
C++による実装例
#include<iostream>
using namespace std;
int sumEvenFactors(int n){
int i, sum = 0;
while(n % 2 == 0){
sum += 2;
n = n/2; // 2で割ってnを小さくしていく
}
return sum;
}
main() {
int n;
cout << "Enter a number: ";
cin >> n;
cout << "Sum of all even prime factors: "<< sumEvenFactors(n);
}
実行結果
Enter a number: 480 Sum of all even prime factors: 10
このプログラムでは、入力された数値が2で割り切れる限り、whileループ内で合計に2を加算し続けます。480の場合、2で5回割り切れるため、結果は10となります。ループの反復回数は2で割れる回数に依存するため、計算量はO(log n)程度と非常に効率的です。
-
Pythonプログラムで数の偶数の約数の合計を求める方法
この記事では、以下の問題文に対する解決策について詳しく解説します。 問題文:ある数が与えられたとき、その数のすべての偶数の約数(因子)の合計を求めて表示します。 アプローチ まず、与えられた数が奇数であるかどうかを確認します。奇数には偶数の約数が存在しないため、その場合は 0 を返します。 数が偶数である場合は、実際の計算に進みます。ここでのポイントは、20(つまり1)以外のすべての項を掛け合わせることで、偶数の約数の合計が得られるという点です。 偶数の約数からすべての奇数を取り除くために、20 に相当する「1」を無視します。この処理を行うことで、残るのは偶数の約数のみとなります。なお、2 は
-
Pythonで数の偶数の約数の合計を求めるプログラムの実装方法
本記事では、以下の問題文に対する解決策について学びます。問題文整数 n が与えられたとき、その数の偶数の約数(偶因子)の合計を求めることが課題です。この問題を解くには、まず奇数の約数をすべて除外する必要があります。入力された数が奇数の場合、偶数の約数は一つも存在しないため、直接 0 を返します。そうでない場合は、以下のコードで示すアプローチに従います。アルゴリズムの考え方このアプローチでは素因数分解を活用します。約数の合計は「各素因数の冪乗の和の積」として表せるという性質を利用します。偶数の約数のみを対象とするため、素因数 2 の部分については 20(つまり 1)を除外し、21 以降の項だけを