-
Pythonで行列をZ字形に出力するプログラムの解説
本記事では、n×n の正方行列の要素を「Z」の字形に沿って出力する方法について、その考え方と実装の手順をわかりやすく解説します。 問題の概要 次数 n×n の正方行列が与えられたとき、その要素を Z 字形に従って順番に表示することが求められます。 Z 字形の走査は、以下の3つのステップで構成されます。 まず、最初の行(1行目)を左から右へ走査する 次に、主対角線(左上から右下へ向かう対角成分)を走査する 最後に、最終行(最後の行)を左から右へ走査する ここでは説明のため、あらかじめ用意した入力行列を使用して、コードの流れを示します。 サンプルコード arr = [[1, 2, 6, 9],
-
Pythonで二分探索(バイナリサーチ)を実装する方法|再帰版・反復版のコード例で解説
はじめに本記事では、ソート済みリストから特定の要素を効率的に探し出す「二分探索(バイナリサーチ)」について、その基本的な考え方とPythonでの実装方法を解説します。問題定義ソートされたリストが与えられます。このリストの中から、指定した要素を二分探索のアルゴリズムを使って見つけ出すことが課題です。アルゴリズムの流れ探索対象の値 x を、リスト中央の要素と比較します。x が中央の要素と一致すれば、そのインデックス(mid)を返します。x が中央の要素より大きい場合、x は中央より右側の半分にしか存在し得ないため、右半分を再帰的に探索します。x が中央の要素より小さい場合は、左半分を再帰的に探索し
-
Pythonでバブルソートを実装する方法をわかりやすく解説
この記事では、代表的なソートアルゴリズムの一つである「バブルソート(Bubble Sort)」をPythonで実装する方法について詳しく解説します。 下図は、このアルゴリズムがどのように動作するかを示したものです。 アルゴリズムの手順 先頭の要素(インデックス = 0)から開始し、現在の要素と配列内の次の要素を比較します。 現在の要素が次の要素より大きい場合、両者を入れ替えます。 現在の要素が次の要素より小さい場合は、そのまま次の要素へ移動します。 この手順を、配列全体がソートされるまで繰り返します。 それでは、実際の実装を見てみましょう。 サンプルコード def bubbleSort(
-
Pythonで数値のすべての桁がその数自身を割り切るかどうかを判定する方法
はじめにこの記事では、与えられた問題に対する解法とアプローチについて学びます。具体的には、「ある整数のすべての桁が、その整数自身を割り切るかどうか」をPythonで判定する方法を解説します。問題文問題: 数値 n が与えられたとき、n のすべての桁が n を割り切るかどうかを判定してください。考慮すべきポイントまず、入力された数値に 0 が含まれていないかを確認する必要があります。0 で割ろうとするとゼロ除算例外(ZeroDivisionError)が発生するため、0 が含まれる場合は答えとして「No」を返さなければなりません。それ以外の場合は、一時変数 flag を用いて判定条件を宣言し、す
-
【Python】約数の個数が偶数か奇数かを判定するプログラムの書き方
この記事では、ある整数の約数の個数が偶数か奇数かを判定するPythonプログラムについて、その考え方と実装方法をわかりやすく解説します。 問題文 ある数「n」が与えられたとき、その約数の総数が偶数であるか奇数であるかを判定してください。 例えば、n = 10 の場合、約数は 1, 2, 5, 10 の4つなので「偶数」。一方、n = 100 の場合は 1, 2, 4, 5, 10, 20, 25, 50, 100 の9つとなり「奇数」となります。 アプローチ:約数を実際に数える 最も基本的な方法は、すべての約数を見つけ、その個数が偶数か奇数かをチェックすることです。 ここで重要なのは、約数
-
複利を計算するPythonプログラムの書き方と実装例
本記事では、与えられた問題文に対する解決策とアプローチについて解説します。Pythonを使って複利(compound interest)を計算する方法を、具体的なコード例とともに見ていきましょう。 問題定義 問題: 元本(principle)、利率(rate)、期間(time)の3つの入力値が与えられ、これらをもとに複利を計算する必要があります。 複利の計算式 複利の計算には、以下の公式を使用します。 Compound Interest = P(1 + R/100)r 各変数の意味は次のとおりです。 P:元本(最初に預け入れる金額) R:年利率(%) T:運用期間(年) 実装例 以下
-
【Python】最初のn個の自然数の立方和を求めるプログラム
本記事では、与えられた問題文を解決するための解法とアプローチについて詳しく解説します。 問題文 − 入力として n が与えられたとき、級数 1³ + 2³ + 3³ + 4³ + …… + n³ の第 n 項までの和を出力する必要があります。 ここでは、この問題を解決するための2つのアプローチを紹介します。 ループを使用した総当たり(ブルートフォース)アプローチ n 個の数の和に関する数学的な公式を利用した解法 アプローチ1:数値を反復処理して各項の和を計算する この方法では、1から n までの各数値を順番に取り出し、その立方値を累積していくことで合計を求めます。ロジックがシンプルで直感
-
Pythonで奇数桁と偶数桁の合計の差を判定するプログラム
この記事では、与えられた問題を解決するための解法とアプローチについて詳しく解説します。 問題文 整数が1つ与えられたとき、奇数桁の合計と偶数桁の合計の差が0であるかどうかを判定する必要があります。 素朴なアプローチ(ブルートフォース) 最も単純な方法は、数値を構成するすべての偶数桁と奇数桁の合計をそれぞれ計算し、その差を求めることです。しかし、この方法では各桁を順番に処理するため、桁数に比例した計算時間が必要になります。 効率的なアプローチ:11の倍数判定を活用 計算時間を削減するために、「暗算の数学」でよく知られている性質を利用します。それは「ある整数の奇数桁の合計と偶数桁の合計の差が0にな
-
Pythonで数値の階乗を計算するプログラム:再帰と反復の2つのアプローチを解説
本記事では、与えられた問題文に対する解決策とアプローチについて学びます。 問題の定義 問題文: n の階乗(factorial)を計算することがタスクです。 非負整数 n の階乗は、以下のように定義されます。 n! = n × (n-1) × (n-2) × (n-3) × … × 3 × 2 × 1 例えば、6 の階乗は「6! = 6 × 5 × 4 × 3 × 2 × 1 = 720」となります。また、0 の階乗は定義により 1 とみなされます。 この問題には、主に以下の2つの解法があります。 再帰的アプローチ(Recursive) 反復的アプローチ(Iterative) アプローチ1
-
Pythonでフィボナッチ数を求める方法:再帰と動的計画法の2つのアプローチを徹底解説
本記事では、「n番目のフィボナッチ数を計算する」という問題に対する解決策と考え方を、2つの異なるアプローチ(再帰的手法と動的計画法)のコード例とともにわかりやすく解説します。 問題の概要 今回の課題は、n番目のフィボナッチ数を求めることです。 フィボナッチ数列 Fn は、次の漸化式によって定義されます。 Fn = Fn-1 + Fn-2 初期値(シード値)は以下の通りです。 F0 = 0、F1 = 1 この問題を解くには、主に次の2つの方法があります。 再帰的なアプローチ 動的計画法によるアプローチ アプローチ1:再帰的な手法 まずは、定義そのものをそのままコードに反映させた再帰的な実
-
【Python】ある数の最大の素因数を求めるプログラムの書き方
この記事では、「与えられた整数の最大の素因数を求める」という問題に対する解決方法を、具体的なコード例とともにわかりやすく解説します。 問題文 正の整数 n が与えられたとき、その数の最大の素因数を求めます。 例えば n = 15 の場合、15 は 3 × 5 と素因数分解できるため、答えは 5 となります。 解き方のアプローチ 入力された数を、小さい約数から順番に割っていくことで素因数分解します。 割り切れるたびに、その時点での約数(素因数)を「最大値」として更新していきます。 平方根まで調べれば十分なため、計算量を抑えられます。 実装例(サンプルコード) import math def
-
Pythonで数の因子の最小合計を求めるプログラム|素因数分解の考え方
本記事では、与えられた整数について、積が元の数と等しくなる因子の組み合わせの中から合計が最小となる値を求める方法を、Pythonのコード例とともに解説します。 問題定義 入力として1つの整数が与えられます。この数を複数の因子の積として表したとき、因子の合計が最小になるケースを求めてください。 すべての因子の組み合わせを網羅的に調べて合計を比較する方法もありますが、実はもっとシンプルで効率的なアプローチが存在します。 考え方:素因数の合計が最小になる 鍵となるのは次の性質です。積が一定の値になるとき、因子の合計が最小になるのは、すべての因子を素数まで分解した場合(素因数分解した場合)です。
-
【Python】配列の全要素の積をnで割った余りを求めるプログラムの書き方
本記事では、以下の問題に対する解決策について詳しく解説します。問題文複数の数値からなる配列と整数 n が与えられたとき、配列内のすべての要素を掛け合わせた結果を n で割った余りを出力する必要があります。アプローチまず、arr[i] % n のように各要素の余りを個別に計算します。次に、その余りを現在の結果に掛け合わせます。掛け算を行うたびに再度剰余演算を適用することで、オーバーフローを回避できます。この手法は、モジュラー算術(合同式)の分配則に基づいています。( a * b) % c = ( ( a % c ) * ( b % c ) ) % c実装例def findremainder(ar
-
Pythonで数の偶数の約数の合計を求めるプログラムの実装方法
本記事では、以下の問題文に対する解決策について学びます。問題文整数 n が与えられたとき、その数の偶数の約数(偶因子)の合計を求めることが課題です。この問題を解くには、まず奇数の約数をすべて除外する必要があります。入力された数が奇数の場合、偶数の約数は一つも存在しないため、直接 0 を返します。そうでない場合は、以下のコードで示すアプローチに従います。アルゴリズムの考え方このアプローチでは素因数分解を活用します。約数の合計は「各素因数の冪乗の和の積」として表せるという性質を利用します。偶数の約数のみを対象とするため、素因数 2 の部分については 20(つまり 1)を除外し、21 以降の項だけを
-
Pythonで数の奇数の約数(奇因子)の合計を求めるプログラム
この記事では、「整数 n が与えられたとき、その数の奇数の約数(奇因子)の合計を求める」という問題の解き方を解説します。 問題文 整数 n が入力として与えられます。求めるのは、n の奇数の約数をすべて足し合わせた値です。 例えば n = 27 の場合、約数は 1, 3, 9, 27 のすべてが奇数であるため、合計は 1 + 3 + 9 + 27 = 40 となります。 アプローチのポイント この問題で最初に行うべきは、偶数の約数をすべて除外することです。 偶数の約数を取り除くには、n が 2 で割り切れなくなるまで繰り返し 2 で割ります。この操作によって n から 2 の因数が完全に
-
第n項がn² − (n−1)²で表される級数の総和を求めるPythonプログラム
本記事では、第n項が n² − (n−1)² で表される級数の総和を、Pythonを使って効率的に求める方法について解説します。 問題文 整数 n が与えられたとき、次の一般項で表される級数の最初の n 項の総和を求めます。 Tn = n² − (n−1)² アプローチのポイント 各項を順番に計算して足し合わせることも可能ですが、この級数には「望遠鏡和(テレスコーピング)」と呼ばれる便利な性質があります。一般項を展開してみましょう。 Tn = n² − (n−1)² = n² − (n² − 2n + 1) = 2n − 1 つまり各項は連続する奇数であり、その総和は次のように簡潔に表せます。
-
Pythonで円柱の周囲の長さを求めるプログラムの書き方
この記事では、入力された直径と高さから円柱の周囲の長さ(外周)を求める方法について解説します。問題の概要円柱の直径と高さが与えられたとき、その円柱の周囲の長さを計算します。ここでいう「周囲」とは、円柱を横から見たときの輪郭、つまり長方形の外形線のことを指します。円柱の側面を展開すると長方形になるため、その周囲は次の式で表せます。周囲の長さ = 2 × ( 高さ h + 直径 d )d:円柱の直径h:円柱の高さそれでは、実際にPythonで実装してみましょう。実装例# 円柱の周囲の長さを計算する関数 def perimeter(diameter, height): return 2 *
-
Pythonプログラムで放物線の頂点・焦点・準線を求める方法
本記事では、Pythonを使って放物線の頂点・焦点・準線を求める方法について詳しく解説します。 問題の定義 放物線の標準形は、次のような二次関数で表されます。 y = ax2 + bx + c 係数 a、b、c の値を入力として受け取り、次の3つの情報を求めるのが今回の課題です。 頂点の座標 焦点の座標 準線の方程式 放物線の基礎用語 頂点(Vertex) 頂点とは、放物線が最も鋭く方向転換する点のことです。グラフ上では放物線の谷(または山)の中心に位置し、放物線の対称軸は必ずこの点を通ります。 焦点(Focus) 焦点は放物線を特徴づける特別な点です。「放物線上の任意の点から焦点ま
-
Pythonプログラムで球面鏡の焦点距離を計算する方法
この記事では、以下の問題文に対する解決策について学んでいきます。 問題文 球面鏡の曲率半径が与えられ、その鏡の焦点距離を求める必要があります。 焦点距離と曲率半径の関係 焦点距離とは、鏡の曲率中心から主焦点までの距離のことです。球面鏡の焦点距離を求めるには、まずその鏡の曲率半径を知る必要があります。曲率半径とは、鏡の頂点から曲率中心までの距離を指します。 これらを数式で表すと、以下のようになります。 凹面鏡の場合 F = R / 2 凸面鏡の場合 F = − R / 2 ここで、Fは焦点距離、Rは曲率半径です。凹面鏡は正の値、凸面鏡は負の値を持つことに注意してください。 実装例 それでは、実
-
Pythonで配列内の複数の数値の最大公約数(GCD)を求める方法
はじめに本記事では、Pythonを使って配列(リスト)内の2つ以上の数値から最大公約数(GCD:Greatest Common Divisor)を求める方法を解説します。問題の概要数値の配列が与えられ、そのすべての要素に共通する最大公約数を求めることが目的です。3つ以上の数値のGCDは、「引数として渡されたすべての数値に共通する素因数の積」として定義できます。また、隣り合う2つの数値のGCDを繰り返し計算していくことでも求められます。ここでは、後者のアプローチである「ペアごとのGCDを順番に計算する」方法を実装します。アルゴリズムの流れまず、リストの最初の2つの要素のGCDを計算します。次に、