数学とコーディングは密接に関連しています — プログラミングには数字が至る所にあります。数が素数かどうかを確認したり、フィボナッチ数列を生成したり、回文を見つけたりするこれらの小さなチャレンジは、数学スキルとコーディングロジックの両方を磨くのに役立ちます。
この記事では、数字に基づいた20の初心者向けプログラミング演習を探ります。それぞれについて、数学の概念の簡単な説明、いくつかのサンプル入力と出力、実行可能なPythonソリューションが得られます。これは、完璧な平方、立方体、三角数などの数学的アイデアがコードの中でどのように生き生きと表現されるかを学びながら、コーディングを練習する楽しい方法です。
1. 最初のN自然数の合計
この演習の目的:
最初のn自然数の合計を求めるプログラムを書きます。これにより、ループや数学的な公式を練習できます。
自然数とは何ですか?
自然数は1から始まる数のことです:1, 2, 3, 4, …
サンプル入力
5
サンプル出力
15
Pythonソリューション
# nを読み取り、閉形式の公式を使って最初のn自然数の合計を計算します
n = int(input("nを入力してください: "))
# 浮動小数点を避けるために整数演算(//)を使用します
total = n * (n + 1) // 2
print(total)
2. 偶数または奇数チェッカー
この演習の目的:
整数を入力し、それが偶数か奇数かを出力します。
偶数/奇数とは何ですか?
偶数は2で割り切れる数(例:2, 4, 6)です。奇数は2で割ったときに余りが1になる数(例:1, 3, 5)です。
サンプル入力
7
サンプル出力
7は奇数です
Pythonソリューション
# モジュロを使用して入力整数が偶数か奇数かを判断します
n = int(input("数を入力してください: "))
if n % 2 == 0:
print(f"{n}は偶数です")
else:
print(f"{n}は奇数です")
3. 素数チェッカー
この演習の目的:
与えられた数が素数かどうかを確認するプログラムを書きます。
素数とは何ですか?
素数は1より大きく、1と自分自身以外の数で割り切れない数です(例:2, 3, 5, 7)。
サンプル入力
13
サンプル出力
13は素数です
Pythonソリューション
# nの平方根までの割り算を試みて素数を確認します
n = int(input("数を入力してください: "))
if n < 2:
print(f"{n}は素数ではありません")
else:
for d in range(2, int(n**0.5) + 1):
if n % d == 0:
print(f"{n}は素数ではありません")
break
else:
print(f"{n}は素数です")
4. 桁の合計
この演習の目的:
数のすべての桁の合計を求めます。
桁の合計はなぜ重要ですか?
桁の合計は、割り算のルールやさまざまな数のパズルに現れます(例:桁の合計が3で割り切れる場合、元の数も3で割り切れます)。
サンプル入力
1234
サンプル出力
10
Pythonソリューション
# 文字を繰り返し処理し、整数に変換して合計を求めます
s = input("数を入力してください: ").strip()
digit_sum = sum(int(ch) for ch in s if ch.isdigit())
print(digit_sum)
5. 回文数チェッカー
この演習の目的:
数が前から読んでも後ろから読んでも同じかどうかを確認します。
回文数とは何ですか?
121、1331、または12321のように、逆にしても同じになる数です。
サンプル入力
12321
サンプル出力
12321は回文です
Pythonソリューション
# 文字列を逆にして比較して回文をテストします
s = input("数を入力してください: ").strip()
print(f"{s}は回文です" if s == s[::-1] else f"{s}は回文ではありません")
6. 数のすべての因数を見つける
この演習の目的:
nを割り切るすべての数をリストアップします。
因数とは何ですか?
因数はnを得るために掛け算できる整数です。12の因数は1, 2, 3, 4, 6, 12です。
サンプル入力
12
サンプル出力
1 2 3 4 6 12
Pythonソリューション
# 1からnまでテストしてすべての因数を生成します
n = int(input("数を入力してください: "))
factors = [d for d in range(1, n+1) if n % d == 0]
print(" ".join(map(str, factors)))
7. 完全数チェッカー
この演習の目的:
nがその正の因数の合計(自分自身を除く)に等しいかどうかを確認します。
完全数とは何ですか?
6(=1+2+3)や28(=1+2+4+7+14)のような数が完全数です。
サンプル入力
28
サンプル出力
28は完全数です
Pythonソリューション
# 正の因数(nを除く)の合計を求めてnと比較します
n = int(input("数を入力してください: "))
proper = [d for d in range(1, n) if n % d == 0]
print(f"{n}は完全数です" if sum(proper) == n else f"{n}は完全数ではありません")
8. アームストロング(ナルシスティック)数チェッカー
この演習の目的:
nがその桁の数の冪の合計に等しいかどうかを確認します。
アームストロング数とは何ですか?
例:153 = 1³ + 5³ + 3³; 9474 = 9⁴ + 4⁴ + 7⁴ + 4⁴.
サンプル入力
153
サンプル出力
153はアームストロング数です
Pythonソリューション
# 各桁をその桁数の冪に上げて合計します
s = input("数を入力してください: ").strip()
p = len(s)
arm = sum(int(ch)**p for ch in s)
print(f"{s}はアームストロング数です" if arm == int(s) else f"{s}はアームストロング数ではありません")
9. 完全平方数チェッカー
この演習の目的:
数が完全平方数かどうかを確認します。
完全平方数とは何ですか?
k²(例:4, 9, 16, 25)として表すことができる数です。
サンプル入力
49
サンプル出力
49は完全平方数です
Pythonソリューション
# 整数平方根を使用して浮動小数点の問題を避けます
import math
n = int(input("数を入力してください: "))
print(f"{n}は完全平方数です" if math.isqrt(n)**2 == n else f"{n}は完全平方数ではありません")
10. 完全立方体チェッカー
この演習の目的:
数が完全立方体かどうかを確認します。
完全立方体とは何ですか?
k³(例:8, 27, 64)として表すことができる数です。
サンプル入力
27
サンプル出力
27は完全立方体です
Pythonソリューション
# 立方根を近似して、元に戻して確認します
n = int(input("数を入力してください: "))
croot = round(n ** (1/3))
print(f"{n}は完全立方体です" if croot**3 == n else f"{n}は完全立方体ではありません")
11. フィボナッチ数列ジェネレーター
この演習の目的:
最初のnフィボナッチ数を生成します。
フィボナッチ数とは何ですか?
0, 1から始まり、各新しい項は前の2つの合計です:0, 1, 1, 2, 3, 5, 8, …
サンプル入力
7
サンプル出力
0 1 1 2 3 5 8
Pythonソリューション
# 2つのトラッカーを使用してフィボナッチ数列を反復的に構築します
n = int(input("nを入力してください: "))
a, b = 0, 1
seq = []
for _ in range(n):
seq.append(a)
a, b = b, a + b
print(" ".join(map(str, seq)))
12. 数がフィボナッチ数列に含まれているか確認する
この演習の目的:
与えられた数がフィボナッチ数列に属しているか確認します。
数学的事実:
nがフィボナッチ数であるためには、(5n² + 4)または(5n² − 4)が完全平方数である必要があります。
サンプル入力
21
サンプル出力
21はフィボナッチ数です
Pythonソリューション
# 5n²±4の完全平方数テストを使用してフィボナッチのメンバーシップを確認します
import math
def is_square(x: int) -> bool:
return math.isqrt(x)**2 == x
n = int(input("数を入力してください: "))
if is_square(5*n*n + 4) or is_square(5*n*n - 4):
print(f"{n}はフィボナッチ数です")
else:
print(f"{n}はフィボナッチ数ではありません")
13. 三角数チェッカー
この演習の目的:
nが三角数であるかどうかを確認します:n = k(k+1)/2 となる整数kが存在するか。
三角数とは何ですか?
三角数は点の三角形を形成します:1, 3, 6, 10, 15, …
サンプル入力
15
サンプル出力
15は三角数です
Pythonソリューション
# k(k+1)/2 = nを解くためにk = floor((sqrt(8n+1)-1)/2)をチェックします
import math
n = int(input("数を入力してください: "))
k = int((math.isqrt(8*n + 1) - 1) // 2)
print(f"{n}は三角数です" if k * (k + 1) // 2 == n else f"{n}は三角数ではありません")
14. 有理数(小数 → 分数)
この演習の目的:
小数を簡約された分数p/qに変換します。
有理数とは何ですか?
整数の比として表すことができる数です(例:0.75 = 3/4)。
サンプル入力
0.75
サンプル出力
3/4
Pythonソリューション
# Fractionを使用して小数をp/q形式に変換し、簡約します
from fractions import Fraction
x = float(input("小数を入力してください: "))
print(Fraction(x).limit_denominator())
15. 三角数チェッカー
この演習の目的:
数が三角数であるかどうかを確認します。すなわち、等辺三角形を形成できるかどうか。
三角数とは何ですか?
三角数は最初のn自然数の合計です:1, 3, 6, 10, 15…
サンプル入力
10
サンプル出力
10は三角数です
Pythonソリューション
import math
n = int(input("数を入力してください: "))
# 公式:8n+1が完全平方数であれば、nは三角数です
check = 8 * n + 1
if int(math.isqrt(check))**2 == check:
print(f"{n}は三角数です")
else:
print(f"{n}は三角数ではありません")
16. フィボナッチ数列ジェネレーター
この演習の目的:
n項までのフィボナッチ数列を生成します。
フィボナッチ数列とは何ですか?
各数は前の2つの合計です:0, 1, 1, 2, 3, 5, 8…
サンプル入力
7
サンプル出力
0 1 1 2 3 5 8
Pythonソリューション
n = int(input("項数を入力してください: "))
a, b = 0, 1
for _ in range(n):
print(a, end=" ")
a, b = b, a + b
17. 桁の合計
この演習の目的:
与えられた数のすべての桁の合計を計算します。
それは何を意味しますか?
例:1234の桁は1+2+3+4 = 10です。
サンプル入力
1234
サンプル出力
10
Pythonソリューション
n = input("数を入力してください: ")
# 各文字をintに戻して合計します
s = sum(int(d) for d in n)
print(s)
18. 数を逆にする
この演習の目的:
与えられた数の桁を逆にします。
それは何を意味しますか?
例:12345は54321になります。
サンプル入力
12345
サンプル出力
54321
Pythonソリューション
n = input("数を入力してください: ")
# スライスを使用して逆にします
print(n[::-1])
19. 最大公約数(GCD)
この演習の目的:
2つの整数を余りなしで割り切る最大の数を見つけます。
GCDとは何ですか?
両方の数に共通する最大の因数です。例:gcd(12, 18) = 6です。
サンプル入力
12 18
サンプル出力
6
Pythonソリューション
import math
a, b = map(int, input("2つの数を入力してください: ").split())
# 効率のためにmath.gcdを使用します
print(math.gcd(a, b))
20. 最小公倍数(LCM)
この演習の目的:
与えられた整数の両方で割り切れる最小の数を見つけます。
LCMとは何ですか?
2つの数の最小公倍数です。例:lcm(4, 6) = 12です。
サンプル入力
4 6
サンプル出力
12
Pythonソリューション
import math
a, b = map(int, input("2つの数を入力してください: ").split())
# 公式:lcm(a, b) = abs(a*b) // gcd(a, b)
print(abs(a*b) // math.gcd(a, b))