-
C言語で数の最大の素因数を求めるプログラム
素因数とは素因数(そいんすう)とは、ある正の整数を余りなく割り切ることができる素数のことです。これらの数を見つける作業は「整数の因数分解」または「素因数分解」と呼ばれます。例:288 の素因数は次のとおりです。288 = 2 × 2 × 2 × 2 × 2 × 3 × 3入力:n = 124 出力:31 が最大の素因数です!アルゴリズムの考え方まず、対象となる数のすべての素因数を求め、その中で最も大きいものを出力します。たとえば 124 を素因数分解すると、124 = 2 × 2 × 31 となり、この中で最大の素因数は 31 です。具体的な手順は以下のとおりです。2 から順に割る数(div)
-
C言語で学ぶ二分探索の実装方法(反復版・再帰版の完全解説)
二分探索(バイナリサーチ)は、「比較」と「分割」の仕組みに基づく効率的な検索アルゴリズムです。半区間探索」「対数探索」「バイナリチョップなどの別名でも知られています。このアルゴリズムは、ソート済みの配列の中から目的の値(ターゲット)の位置を探し出します。具体的な流れは以下のとおりです。まずターゲット値を配列の中央の要素と比較します。中央の要素がターゲットと一致すれば、そのインデックスを返して終了です。一致しない場合は、比較結果に応じて検索範囲を半分に絞ります。ターゲットが中央の値より小さければ前半部分を、大きければ後半部分を対象とし、見つかるまで同じ手順を繰り返します。入力: A[] = {0
-
【C言語】選択ソートのアルゴリズムと実装方法をわかりやすく解説
選択ソート(Selection Sort)は、比較ベースの基本的なソートアルゴリズムの一つです。配列の中から最小値を見つけて先頭の位置に移動させ、その操作を繰り返すことで配列全体を昇順に並べ替えます。次回以降の走査では、すでに確定した位置の次の要素から探索を開始するのがポイントです。具体例で仕組みを理解する配列 {6, 3, 8, 12, 9} を例に考えてみましょう。この配列の最小値は「3」なので、3を先頭に移動すると配列は {3, 6, 8, 12, 9} となります。次に再び最小値を探しますが、今回はすでに確定済みの「3」は探索対象から除外します。次の最小値である「6」が見つかったら、そ
-
【C言語入門】数値が素数かどうかを判定するプログラムの書き方
素数とは何か? 素数とは、「1とその数自身」の2つの数でしか割り切れない数のことです。ここでいう「約数」とは、その数を余りなく割り切ることができる数を指します。 最初の10個の素数は「2、3、5、7、11、13、17、19、23、29」です。 素数ではない数は合成数と呼ばれます。合成数とは、2つ以上の約数を持つ数のことです。 さらに、1は素数でも合成数でもありません。1の約数は1自身のみであり、約数が2つ存在しないためです。 素数であるための2つの条件 ある数が素数かどうかを判定するには、以下の2つの条件を確認します。 1より大きい整数であること 約数が「1」と「その数自身」のちょうど2つ
-
級数の和を求める:1² + 3² + 5² + … + (2n−1)²
級数とは、何らかの共通の規則に従って並べられた数の列のことです。数学における級数は、一定の論理に基づいて定義されます。例えば、各項が同じ間隔で増加する「等差数列」、各項が同じ倍数で増加する「等比数列」など、さまざまなパターンが存在します。級数の和を求めるには、級数の規則性を分析し、一般的な公式を導き出すことが理想的です。しかし、本題の級数には単純な共通の宣言がないため、ここでは各項を順番に合計変数へ加算していく古典的なアプローチを用います。具体例を挙げて、ロジックをより明確にしてみましょう。最初の7項までの級数の和:sum(7) = 12 + 32 + 52 + 72 + 92 + 112 +
-
級数 2/3 − 4/5 + 6/7 − 8/9 + … の初項から第n項までの和を求める方法
級数(series)とは、何らかの共通の規則や法則に従って並べられた数の列のことを指します。数学には、特定の論理や公式によって定義されたさまざまな級数が存在します。本記事で扱うのは、次のような符号が交互に入れ替わる級数です。2/3 , −4/5 , 6/7 , −8/9 , ……級数の一般項この級数の一般項は、次の式で表すことができます。(−1)n × (2n) / (2n + 1)つまり、分子が偶数(2, 4, 6, 8…)、分母がその次の奇数(3, 5, 7, 9…)となり、正負の符号が1項ごとに交互に現れるのが特徴です。級数の和を求めるには、各項を順番に加算していきます。2/3 − 4/
-
等差数列(AP)の交互符号付き平方級数の合計を求める方法
等差数列(AP)とは等差数列(Arithmetic Progression:AP)とは、隣り合う項同士の差が常に一定である数列のことです。この一定の差は「公差」と呼ばれ、前項を基準にして隣の項を引くことで求められます。具体例として、次の数列を見てみましょう。5, 7, 9, 11, 13, 15, …この等差数列の公差(d)は 2 です。つまり、各項は直前の項より必ず 2 大きくなっています。また、初項(a)は 5 です。第 n 項を求めるための一般式は以下の通りです。an = a + (n − 1) × d問題の概要本問題では、与えられた等差数列の各項を平方し、その符号を正と負で交互に付けた
-
1からnまでの自然数で構成される集合の全部分集合の合計を求める
集合(セット)とは、複数のデータ要素をひとまとめに扱うための概念です。そして、ある集合 A の部分集合 B とは、B に含まれるすべての要素が A にも存在するような集合を指します。 この記事では、「1 から n までの連続する自然数」で構成される集合を対象に、そのすべての部分集合に含まれる数値の総和を求める方法を解説します。基本的な考え方は、生成可能なすべての部分集合を列挙し、そこに現れる数値をすべて足し合わせるというものです。 具体例で確認する まずは小さな例で考えてみましょう。 N = 3 集合 = {1, 2, 3} 部分集合 = {1}, {2}, {3}, {1,2},
-
最初のn個の奇数の2乗の総和を求める方法|公式とC言語の実装例
奇数の2乗の数列とは最初のn個の奇数の2乗からなる数列とは、1から始まる奇数を順番に2乗して並べたものです。この数列は次のように表されます。1, 9, 25, 49, 81, 121…また、各項が奇数の2乗であることを明示すると、次のようにも書けます。12, 32, 52, 72, 92, 112…総和を求める数学的公式この数列の総和は、次の公式を使うことで簡単に求められます。sum = n(2n+1)(2n−1)/3 = n(4n2−1)/3計算例入力:N = 4 出力:sum = 84解説まず、各項を実際に足し合わせて確認してみます。12 + 32 + 52 +
-
最初のn個の自然数の平方和の総和を求める2つの方法
平方和の総和とは最初のn個の自然数の平方和の総和とは、1からnまでの各自然数について「その数までの平方の和」を求め、それらをさらに合計した値のことです。具体的には、各項の平方和を順番に計算し、その結果を合計用の変数に加算していきます。計算例(n = 4 の場合)最初の4つの自然数の平方和の総和は、次のように求められます。sum = (12) + (12 + 22) + (12 + 22 + 32) + (12 + 22 + 32 + 42)= 1 + 5 + 14 + 30 = 50この総和を求める方法には、大きく分けて以下の2つがあります。方法1:forループを使う方法この方法では、1からn
-
正方行列を対称行列と交代対称行列の和に分解する方法
対称行列とは対称行列 ― 転置行列が元の行列そのものと等しい行列は、「対称行列」と呼ばれます。つまり、A = AT が成り立つ行列です。交代対称行列(スキュー対称行列)とは交代対称行列 ― 転置行列が元の行列の符号を反転したもの(-1倍)と等しい行列は、「交代対称行列(スキュー対称行列)」と呼ばれます。つまり、AT = -A が成り立つ行列です。任意の正方行列は、必ずある対称行列と交代対称行列の和として表すことができます。この2つの行列を求めるには、以下の公式を使用します。分解の公式A を正方行列とすると、次のように表せます。A = (½) × (A + AT) + (½) × (A - AT
-
配列として表される数に1を加える方法(再帰的アプローチ)
非負の整数を桁の並びとして表現した配列が与えられます。この数に1を加えてください(桁列で表された数値のインクリメント)。桁は、最上位の桁が配列の先頭要素となるように格納されています。 アルゴリズムの考え方 桁列で表された数に1を加えるには、以下の手順で考えます。 配列を末尾から見ていき、加算では最後の数字(たとえば4)を5へ繰り上げます。 末尾の要素が9である場合は、その要素を0にし、繰り上がり(キャリー)を1とします。 次のステップでは繰り上がりの有無を確認し、加算結果が10になる場合には上記と同じ処理を行います。 繰り上がりを加算した後は、次のステップに備えて繰り上がりを0に戻します。
-
1からnまでの自然数の二乗の平均を求める方法
はじめにある数値 n が与えられたとき、1 から n までの自然数それぞれの二乗を計算し、その平均値を求める問題について解説します。手順は以下の通りです。1 から n までの各自然数の二乗を順番に計算するそれらの二乗の合計を求める合計を n で割って平均値を算出する入出力例入力:3出力:4.666667計算の流れn = 3 の場合、以下のように計算されます。1² + 2² + 3² = 1 + 4 + 9 = 1414 ÷ 3 = 4.666667つまり、まず各数値を二乗して合計し、最後に個数 n で割ることで平均が得られます。C++による実装例以下は、ループを使って二乗の平均を求める C++
-
9の補数と10の補数とは?求め方とC++での実装例をわかりやすく解説
デジタルシステムにおいて、9の補数と10の補数は、算術演算を簡単に実行するために使われる重要な概念です。補数を利用することで計算処理が効率化され、通常はハードウェアの負担をプログラム側で補う形として活用されます。 任意の数の9の補数を求めるには、その数を (10n − 1) から引きます。ここで n はその数の桁数です。より簡単な方法としては、与えられた10進数の各桁の数字をそれぞれ9から引くことでも求められます。 10の補数については、まず9の補数さえ求めてしまえば、比較的簡単に導き出すことができます。具体的には、任意の数の9の補数に1を加えるだけで、目的の10の補数が得られます。また、直接
-
C/C++でn番目のフィボナッチ数を求めるプログラムの書き方
フィボナッチ数列とは、「直前の2項の和が次の項になる」という規則性を持つ数列です。最初の2項は 0 と 1 から始まります。本記事では、フィボナッチ数列のn番目までの値をすべて計算して出力するプログラムを、C/C++を使って解説します。forループを用いて「前の2項の和」を順に求めていく、最も基本的な実装方法を紹介します。入出力例入力:8 出力:0 1 1 2 3 5 8 13n = 8 を指定した場合、8項目までのフィボナッチ数が順番に出力されます。計算の流れ0+1=1 1+1=2 1+2=3 2+3=5このように、直前の2項を足し合わせることで次の項が決まっていきます。これを繰り返すことで
-
C++で複利を計算するプログラムの作り方
複利(Compound Interest)とは、毎年発生した利息が元本に組み込まれ、その合計額をもとに翌年の利息が計算される仕組みのことです。元本にだけ利息がつく「単利」とは異なり、利息がさらに利息を生むため、最終的に得られる金額は単利の場合より大きくなります。複利の計算には専用の数学的な公式を使用します。 複利の基本公式 複利は次の式で求められます。 元利合計 = 元本 × (1 + 年利率 ÷ 100) ^ 期間利息額 = 元本 × ((1 + 年利率 ÷ 100) ^ 期間 − 1) 計算例 入力:p = 5(元本)、r = 4(年利率%)、t = 5(期間・年)出力:1.08326
-
C言語で最初のn個の自然数の3乗の和を計算するプログラム
最初のn個の自然数の3乗和とは、1からnまでのすべての自然数について、それぞれの値を3乗して合計するプログラムのことです。つまり、数列 1³ + 2³ + 3³ + … + n³ の総和を求める問題です。入力:6 出力:441計算の流れn = 6 の場合、以下のように各自然数を3乗して足し合わせます。1³ + 2³ + 3³ + 4³ + 5³ + 6³ = 1 + 8 + 27 + 64 + 125 + 216 = 441この計算は、forループを使って実装できます。ループで変数 i を1からnまで増加させながら、i の3乗(i × i × i)を順番に合計変数に加算していきます。サンプルコ
-
【C言語】奇数の桁と偶数の桁の合計差を求めるプログラム
ある数値が与えられたとき、その奇数の桁の合計と偶数の桁の合計の差を求めるプログラムを考えてみましょう。具体的には、数値を構成するすべての桁を偶数と奇数に分類し、それぞれの合計値を計算したうえで、その差を求めます。 サンプル 入力:12345 出力:3 解説 奇数の桁:1 + 3 + 5 = 9 偶数の桁:2 + 4 = 6 差(奇数 − 偶数):9 − 6 = 3 この問題は、次のような流れで解くことができます。まず数値から1桁ずつ数字を取り出し、それが偶数か奇数かを判定します。偶数であれば偶数の合計に、そうでなければ奇数の合計に加算していき、最後に両者の差を計算します。 アルゴリズムの手順
-
配列内の全要素の合計を求めるC/C++プログラム
配列内の全要素の合計とは、配列に格納されているすべての要素を足し合わせた値のことです。ここでは、配列に5つの要素が含まれている場合を例に、その合計を求める方法を解説します。arr[0]=1 arr[1]=2 arr[2]=3 arr[3]=4 arr[4]=5上記のすべての要素を足すと、合計は次のようになります。arr[0]+arr[1]+arr[2]+arr[3]+arr[4]=1+2+3+4+5=15この処理を入力と出力で表すと、以下のとおりです。入力:1,2,3,4,5 出力:15アルゴリズムの解説この問題は、forループを使って配列の各インデックスの要素に順番にアクセスし、その値を合計
-
アームストロング数(Armstrong Number)とは?Cプログラムで判定方法を解説
「アームストロング数(Armstrong Number)」とは、各桁の数字を3乗し、その合計が元の数値と一致するような数のことです。これは数学的な概念であり、プログラミング初心者が基本的なロジック構築力を身につけるための定番の演習題材としてよく使われます。入力:370 出力:370 はアームストロング数です仕組みの解説例として 370 を見てみましょう。この数の各桁は「3」「7」「0」であり、それぞれを3乗して足し合わせると次のようになります。370 = 3×3×3 + 7×7×7 + 0×0×0 = 27 + 343 + 0 = 370計算結果が元の数値 370 と一致しているため、