(1) while文とif文
ループ変数の値によって条件分岐
次のコードは、n = 1からはじめて、nを1ずつ大きくしていき、4と5で割り切れる最小の整数を求める例です。nを1ずつ大きくしていくごとに、「4でも5でも割り切れません」,「4で割り切れます」,「5で割り切れます」と表示し、最後は「4と5で割り切れます」と表示します。
n = 1
while n % 4 != 0 or n % 5 != 0:
if n % 4 == 0:
print(n, "は4で割り切れます")
elif n % 5 == 0:
print(n, "は5で割り切れます")
else:
print(n, "は4でも5でも割り切れません")
n = n + 1
print("よって、", n, "は4と5で割り切れます。")
1 は4でも5でも割り切れません
2 は4でも5でも割り切れません
3 は4でも5でも割り切れません
4 は4で割り切れます
5 は5で割り切れます
6 は4でも5でも割り切れません
7 は4でも5でも割り切れません
8 は4で割り切れます
9 は4でも5でも割り切れません
10 は5で割り切れます
11 は4でも5でも割り切れません
12 は4で割り切れます
13 は4でも5でも割り切れません
14 は4でも5でも割り切れません
15 は5で割り切れます
16 は4で割り切れます
17 は4でも5でも割り切れません
18 は4でも5でも割り切れません
19 は4でも5でも割り切れません
よって、 20 は4と5で割り切れます。
この例のwhile文の条件式はn % 4 != 0 or n % 5 != 0となっていますが、not(n % 4 == 0 and n % 5 == 0)と変えても同様に求められますので確認してみましょう。
コラッツ予想
コラッツ予想($3n+1$問題)は、1937年ロタール・コラッツによって提案された整数に関する未解決問題のひとつです。
任意の正の整数 $n$に対して、以下の操作を行います。
・$n$が偶数なら、$n$を2で割る。
・$n$が奇数なら、$n$を3倍して1を足す。
これを繰り返し行うと、どんな初期値($n$)から始めても、必ず1になります。
例えば、$n = 6$から始めると、6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1となります。
コラッツ予想はコンピュータによる解析的に多くの数字で成り立つことがわかっているが、数学的に証明されていないため、未解決の問題であるとされています。
n = 6
print(n)
while n > 1:
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
print(n)
6
3
10
5
16
8
4
2
1