C++でアリコート和(Aliquot Sum)を計算する方法
本記事では、アリコート和(Aliquot Sum)とは何かを解説します。アリコート和とは、ある数 n の約数のうち、n 自身を除いたすべての約数の総和のことです。例えば、数値が 20 の場合、その約数は (1, 2, 4, 5, 10) となるため、アリコート和は 22 になります。
興味深い点として、アリコート和がその数自身と等しくなる場合、その数は「完全数」と呼ばれます。例えば 6 の場合、約数は (1, 2, 3) であり、アリコート和は 1 + 2 + 3 = 6 となるため、6 は完全数です。
それでは、以下のアルゴリズムを使ってアリコート和を求める方法を見ていきましょう。
アルゴリズム
getAliquotSum(n)
begin
sum := 0
for i in range 1 to n, do
if n is divisible by i, then
sum := sum + i
end if
done
return sum.
end
C++での実装例
以下は、C++でアリコート和を計算するサンプルプログラムです。1 から n-1 までの数値を順に調べ、n を割り切れるもの(約数)を合計しています。
#include <iostream>
using namespace std;
int getAliquotSum(int n) {
int sum = 0;
for(int i = 1; i<n; i++) {
if(n % i == 0) {
sum += i;
}
}
return sum;
}
int main() {
int n;
cout << "Enter a number to get Aliquot sum: ";
cin >> n;
cout << "The Aliquot sum of " << n << " is " << getAliquotSum(n);
}
実行結果
Enter a number to get Aliquot sum: 20
The Aliquot sum of 20 is 22
このプログラムでは、入力として 20 を与えると、約数 (1, 2, 4, 5, 10) の総和である 22 が出力されます。なお、この実装の計算量は O(n) ですが、約数を √n まで調べてペアで加算する方法を使えば、より効率的に O(√n) まで計算量を抑えることも可能です。
-
C++で算術平均(平均値)を求める方法
算術平均とは、いわゆる「数値の平均」のことです。本記事では、C++を使って複数の数値から算術平均を求める方法を解説します。ここで作成する関数は、数値の集合(配列)とその要素数を受け取ります。処理内容はシンプルで、各要素をすべて足し合わせ、最後に要素数で割るだけです。算術平均の基本式算術平均は次の式で表されます。算術平均 = (全要素の合計) ÷ (要素数)アルゴリズムarithmeticMean(dataset, n)まず、処理の手順を擬似コードで確認しましょう。begin sum := 0 for each element e from d
-
C++のアクセス修飾子とは?public・private・protectedの違いと使い方を実例で解説
アクセス修飾子(Access Modifier)は、オブジェクト指向プログラミングにおける「データ隠蔽(カプセル化)」を実現するための重要な仕組みです。クラスの外部からメンバ変数やメンバ関数への不正なアクセスを防ぎ、プログラムの安全性と保守性を高めます。C++には主に次の3種類のアクセス修飾子が用意されています。public:どこからでもアクセス可能private:同じクラス内(およびフレンド)からのみアクセス可能protected:クラス内と派生クラスからアクセス可能以下、それぞれの特徴と具体的なコード例を見ていきましょう。1. publicアクセス修飾子publicとして宣言されたメンバ変