C言語で対数 log₂n を計算するプログラム
入力として整数 n の値が与えられ、その値に対する対数(log2n)を関数を使って計算し、結果を表示します。
対数(ログ)とは、べき乗の逆関数にあたるものです。つまり、対数を求めるということは、「ある基数(底)を何乗すれば目的の値になるか」という指数を求めることを意味します。
数式で表すと、次のように定義されます。
$$\log_b x\;=\:y\quadならば\quad b^{y}=x$$
具体例を挙げると、次のようになります。
$$\log_2 64\;=\:6\quadならば\quad 2^{6}=64$$
実行例
入力: Log 20 出力: 4 入力: Log 64 出力: 6
アルゴリズム
開始
関数 unsigned int log2n(unsigned int num) 内
ステップ1→ (num > 1) ? 1 + log2n(num / 2) : 0 を返す
関数 int main() 内
ステップ1→ 変数 num を宣言し、20 を代入する
ステップ2→ log2n(num) の結果を出力する
終了C言語での実装例
#include <stdio.h>
// 再帰的なアプローチを使用して log2n を計算します
unsigned int log2n(unsigned int num) {
return (num > 1) ? 1 + log2n(num / 2) : 0;
}
int main() {
unsigned int num = 20;
printf("%u\n", log2n(num));
return 0;
}出力
4
プログラムの仕組み
このプログラムでは、再帰呼び出しを利用して対数を求めています。仕組みは非常にシンプルで、引数 num が 1 より大きい間、それを 2 で割り続け、割った回数をカウントしていきます。
num を 2 で割れる回数は、そのまま「2 を何乗すると num に達するか」に相当するため、再帰が完了した時点でのカウント数が log2n の値(小数点以下切り捨て)となります。
例えば num = 20 の場合、20 → 10 → 5 → 2 → 1 と 4 回の除算で 1 に到達するため、出力は 4 になります。
-
C言語でプラス完全数(Armstrong数)を判定するプログラム
n桁の整数xが与えられたとき、その数が「プラス完全数(Plus Perfect Number)」であるかどうかを判定するのが本記事のテーマです。プラス完全数とは、各桁の数字dを桁数nでべき乗した値(dn)をすべて合計し、その合計が元の数と一致する場合を指します。この考え方は、いわゆる「Armstrong数(ナルシシスト数)」の判定とまったく同じものです。 具体例 入力:163 出力:完全数ではない 説明:1³ + 6³ + 3³ = 244 となり、163と一致しないため 入力:371 出力:完全数である 説明:3³ + 7³ + 1³ = 371 となり、元の数と一致するため 上記の例のよ
-
C言語でアームストロング数を判定するプログラムの作成方法
アームストロング数とは? 本記事では、入力された整数 n がアームストロング数(Armstrong number)であるかどうかを判定するCプログラムについて解説します。 アームストロング数とは、各桁の数字をそれぞれ「桁数(位数)」でべき乗し、その総和が元の数値と等しくなる数のことです。例えば、4桁の数 1634 は 14 + 64 + 34 + 44 = 1 + 1296 + 81 + 256 = 1634 となるため、アームストロング数です。 アームストロング数を求める基本的な考え方は、次の式のように表せます。 計算式: wxyz…. = pow(w, n) + pow(x, n) + p