自然数の約数をすべて求める方法【C++で解説】
はじめに
このチュートリアルでは、自然数の約数をすべて見つけるプログラムをC++で作成します。約数とは、その数を余りなしで割り切ることができる整数のことです。これは非常にシンプルな問題なので、基本的なアルゴリズムの練習に最適です。それでは、解決の手順を見ていきましょう。
アルゴリズムの手順
- 調べたい自然数を初期化します。
- 1からその数まで順番にループ処理を行います。
- 現在の数で対象の数が割り切れるかどうかを判定します(剰余演算 % を使用)。
- 割り切れる場合は、その数は約数なので出力します。
この方法の計算量は O(n) であり、n が大きくなると処理時間が増加しますが、まずは最も分かりやすい素直な実装を紹介します。
サンプルコード
実際のコードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
void findDivisors(int n) {
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
cout << i << " ";
}
}
cout << endl;
}
int main() {
findDivisors(65);
return 0;
}コードの解説
関数 findDivisors では、変数 i を1から n まで増やしながら、n % i == 0(n を i で割った余りが0)という条件で約数かどうかを判定しています。条件を満たした値だけを標準出力に表示する仕組みです。
実行結果
上記のコードを実行すると、次のような出力が得られます。
1 5 13 65
65 の約数は 1、5、13、65 の4つであることが確認できます。
まとめ
今回は、C++を使って自然数の約数をすべて求めるプログラムを作成しました。シンプルなループと剰余演算だけで実装できる、非常に基礎的なアルゴリズムです。慣れてきたら、平方根まで調べることで計算量を O(√n) に抑える高速化にもぜひ挑戦してみてください。
このチュートリアルについて質問がある場合は、コメント欄でお知らせください。
-
C++で1〜nの範囲にあるすべての数の約数の個数を求める方法
この問題では、整数Nが与えられ、1からnまでの範囲に含まれるすべての数について、それぞれの約数の個数を求めることが課題となります。問題の例具体例を見てみましょう。入力 : N = 7出力 : 1 2 2 3 2 4 2N = 7の場合、1の約数は「1」の1個、2の約数は「1, 2」の2個、3の約数は「1, 3」の2個、4の約数は「1, 2, 4」の3個…というように、各数の約数の個数を順に出力します。解法アプローチ1:各数ごとに約数を数える方法最もシンプルな解法は、1からNまでの各数に対して、実際に割り切れる数を順番にカウントしていく方法です。各数iについて、2からiまでの値で順に割りを試し、
-
C++で集合の反射関係の数を求める方法
この記事では、C++を使って集合上に定義できる反射関係(reflexive relation)の総数を求める方法について解説します。問題設定としては、整数 n が与えられたとき、n 個の自然数からなる集合上に存在する反射関係の個数を求めるというものです。 反射関係とは 集合 A 上の関係 R が反射的であるとは、「A に属するすべての要素 a に対して、順序対 (a, a) が必ず R に含まれる」という条件を満たすことを意味します。数式で表すと次のようになります。 (a, a) ∈ R (∀ a ∈ A) 具体的な入出力の例を見てみましょう。 入力 : x = 1 出力 : 1 説明 : 集