数学とコーディングは密接に関連しています — プログラミングには数字が至る所にあります。数が素数かどうかを確認したり、フィボナッチ数列を生成したり、回文を見つけたりするこれらの小さなチャレンジは、数学スキルとコーディングロジックの両方を磨くのに役立ちます。 

この記事では、数字に基づいた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))