偶奇で考える

回 8-2 分野 8 考え方

偶奇 (ぐうき) は、整数が偶数か奇数かという性質です。偶奇で考えるとは、数が偶数か奇数かだけを見て、操作の前後で変わらない性質を探すことです。表のコイン 7 枚を、1 回に 2 枚ずつ裏返して全部裏にすることはできません。1 回の操作で表の枚数は 2 増えるか 2 減るか変わらないので、表の枚数が奇数のまま、0 (偶数) にはならないからです。

偶数と奇数の計算の決まりから、変わらない量を使って「できない」を示す考え方まで、全部の場合を Python で数えて確かめます。

2 枚ずつ裏返して、7 枚を全部裏にできるか

できません。何回試しても、何通りの順で裏返しても、全部裏にはなりません。

7 枚のコインが全部表で並んでいます。1 回の操作では、好きな 2 枚を選んで、両方を裏返します (表は裏に、裏は表に)。これを繰り返して全部を裏にできるかを考えます。

試す順は無数にあるので、試して「できなかった」を積み上げても、できない理由にはなりません。ここで効くのが、数が偶数か奇数か (偶奇、英語ではパリティ) だけを見る考え方です。操作の前後で変わらない量を見つけると、探さずに「できない」と言えます。

偶奇の決まりと変わらない量

偶数と奇数の計算

偶数は 2 で割り切れる整数、奇数は 2 で割ると 1 余る整数です。0 も偶数です。足し算と掛け算の偶奇は、元の数の偶奇だけで決まります。

計算偶数と偶数偶数と奇数奇数と奇数
足し算、引き算偶数奇数偶数
掛け算偶数偶数奇数

表から、2 つの整数の和と差は、いつも同じ偶奇になることも分かります。a − b = (a + b) − 2b で、2b は偶数なので、偶数を引いても偶奇は変わらないからです。隣り合う 2 つの整数は、片方が偶数で片方が奇数です。奇数を足すたびに偶奇が入れ替わり、偶数を足しても偶奇は変わりません。だから、整数をいくつ足しても、和の偶奇は「奇数がいくつ入っているか」の偶奇で決まります。

変わらない量 (不変量)

操作を何回しても変わらない量を、不変量と呼びます。不変量が見つかれば、始めと目標で不変量が違うとき、目標には届かないと言えます。

コインの問題では、表の枚数の偶奇が不変量です。2 枚を裏返すとき、選んだ 2 枚の組み合わせで表の枚数は次のように変わります。

選んだ 2 枚表の枚数の変化偶奇
表と表2 減る変わらない
裏と裏2 増える変わらない
表と裏変わらない変わらない

始めは表が 7 枚 (奇数)、目標は 0 枚 (偶数) です。偶奇が変わらない操作だけでは、奇数から偶数には移れません。

色を塗って偶奇を作る

8 × 8 の盤から、向かい合う 2 つの角を除いた 62 マスを、1 × 2 のドミノ 31 枚で敷き詰められるかを考えます。盤を市松模様に塗ると、ドミノ 1 枚は必ず白 1 マスと黒 1 マスを覆います。向かい合う角は同じ色なので、残りは一方の色が 32 マス、他方が 30 マスです。31 枚で両方の色を 31 マスずつ覆う必要があるので、敷き詰められません。

数ではない物も、色を塗ったり 0 と 1 を割り当てたりすると、偶奇で考えられます。

ビットの最下位は偶奇

整数を 2 進数で書くと、一番右の桁 (最下位ビット) は、偶数なら 0、奇数なら 1 です。だから x & 1 (最下位ビットだけを取り出す計算) で偶奇が分かります。2 進数の桁の重みは CS 1-1 で扱います。

動かして確かめる

1 本目は、コインの問題を全部の状態で調べます。表と裏を 1 と 0 で表すと、7 枚の並びは 2^7 = 128 通りです。全部表の状態から、操作でたどり着ける状態を、幅優先探索 (近い所から順に広げる探し方) で全部数えます。

動かす 2 枚ずつ裏返す全部の状態

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

届く状態 64
全部裏 False
表の数がどれも奇数 True

届く状態は 128 通りの半分の 64 通りで、どれも表の枚数が奇数でした。全部裏 (表 0 枚) は入っていません。表の枚数の偶奇という不変量が、全部の場合を数えた結果と合います。

2 本目は、コインが 6 枚のときです。始めの表の枚数が偶数になるので、結果が変わるかを確かめます。

動かす 6 枚なら全部裏にできるか

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

6 枚 3
7 枚 None

6 枚なら 3 回で全部裏にでき、7 枚では届きません (None は届かないという意味)。不変量は「できない」を示す道具で、偶奇が合っているときに「できる」までは言いません。6 枚で届くことは、実際に手順 (2 枚ずつ 3 回) を作って確かめます。

3 本目は、ドミノの問題の色の数を数えます。マス (r, c) の色を (r + c) の偶奇で決めます。

動かす 角を除いた盤の色を数える

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

マス 62
白 30 黒 32
要るのは白黒 31 ずつ

白が 30、黒が 32 で、ドミノ 31 枚で覆うには白黒が 31 ずつ要ります。色の数が合わないので、敷き詰めはできません。

4 本目は、偶奇の判定の書き方と、負の数での違いです。

動かす 偶奇の判定と負の数

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

6 0 0
7 1 1
0 0 0
-3 1 1
0b1011001 1 の数 4 偶奇 0
0b1011000 1 の数 3 偶奇 1

Python では -3 % 2 は 1 で、x & 1 と同じ答えです。最後の 2 行は、7 ビットのデータに含まれる 1 の数の偶奇 (パリティ) です。1 ビットだけ変わると、パリティが入れ替わります。

偶奇で考えると外れる所

言語によって負の数の余りが違う

Python の % は、割る数と同じ符号の余りを返すので、-3 % 2 は 1 です。C (C99 以降)、Java、JavaScript の % は、割られる数と同じ符号の余りを返すので、-3 % 2 は -1 になります。これらの言語で x % 2 == 1 と書くと、負の奇数を奇数と判定しません。x % 2 != 0 か、2 の補数で整数を持つ言語なら x & 1 と書くと、負の数でも外れません。

偶奇が合っても、できるとは限らない

不変量が合っていることは、届くための必要条件にすぎません。15 パズル (4 × 4 の枠で 15 枚の札を滑らせる遊び) は、並びの偶奇が合わない配置には届かないことが知られています。けれど偶奇が合う配置に本当に届くことは、偶奇とは別に示す必要があります。

パリティビットは 2 ビットの誤りを見逃す

送るデータに、1 の数を偶数 (または奇数) にそろえる 1 ビット (パリティビット) を足すと、1 ビットの誤りは見つかります。けれど 2 ビットが同時に変わると、1 の数の偶奇は元に戻るので見逃します。誤りを直したり、多くの誤りを見つけたりするには、CRC やハミング符号のような別の方法を使います。

仕事とコンテストでどう使うか

偶奇で考える場面は、次の通りです。

  • 誤りの検出。通信や記憶のパリティビットは、1 の数の偶奇で 1 ビットの誤りを見つける
  • できない証明。パズルやゲームで「この状態には絶対に届かない」を、全部を探す前に言える。コーディングテストで、答えが -1 (不可能) になる場合を見分けるのに効く
  • グラフ。どのグラフでも、頂点の次数 (つながる辺の数) の合計は辺の数の 2 倍で偶数になる。だから次数が奇数の頂点は偶数個ある (分野 6 のグラフの回で扱う予定)
  • 並べ替え。2 つの要素を入れ替える操作は、並びの偶奇 (置換の偶奇) を毎回入れ替える。ある並びに何回の入れ替えで届くかの偶奇は決まっている
  • 表示。表の行を交互に色分けするときの i % 2、交互に処理を振り分けるときの偶奇

よくある問い

偶奇とは何ですか

整数が偶数か奇数かという性質です。2 で割った余りが 0 なら偶数、1 なら奇数です。英語ではパリティ (parity) と呼び、パリティビットのパリティも同じ意味です。

0 は偶数ですか

偶数です。0 は 2 × 0 で、2 で割り切れます。プログラムでも 0 % 2 は 0、0 & 1 も 0 です。

不変量はどうやって見つけますか

操作を 1 回したとき、何が変わって何が変わらないかを表にします。数そのものが変わっても、その偶奇、合計、余りなどは変わらないことがあります。コインなら、表の枚数は変わっても、偶奇は変わりませんでした。

偶奇の判定は % 2 と & 1 のどちらで書けばよいですか

Python ならどちらでも同じ答えです。C、Java、JavaScript では負の数の余りが -1 になるので、x % 2 == 1 は負の奇数で外れます。x % 2 != 0 と書けば、どの言語でも負の数を含めて奇数を判定できます。

確認クイズ

答えだと思う選択肢を押すと、その場で正誤と理由が開きます。3 問すべてに正しく答えると、この回は修了で、石が緑に変わります (この端末のブラウザに残ります)。間違えた問いは、あとから解き直せます。

1 問目

1 から 100 までの整数を全部足した和の偶奇はどれですか。

2 問目

黒板に 1 から 10 までの整数が 1 つずつ書いてあります。2 つの数を消して、その和を 1 つ書く操作を 9 回すると、最後に 1 つ残ります。残る数の偶奇はどれですか。

3 問目

JavaScript で -5 % 2 を計算すると、どの値になりますか。

説明課題

「全部表の 7 枚のコインを、2 枚ずつ裏返して全部裏にできない理由」を、不変量という言葉を使って 3 文で説明してください。書いたら、下の模範解答を開いて比べてください。

模範解答

自分の説明を書いてから開いて、比べてください。

この回の先の一歩

「何回試してもできない」を、試した回数ではなく変わらない量で説明できると、仕様の議論やコーディングテストで、探す前に答えを出せます。いまの自分が転職までの道のどの段にいるかは、転職診断で確かめられます。

もっと深く

この回の続きを、ゆめさくのコースの章や道具で深められます。頁の中の確認クイズに答えたあと、手を動かす量を増やしたいときに使ってください。

一次資料

どれも 2026年10月30日に開いて、題と中身を確かめました。

次へ

分野 8 考え方の回

  1. 8-1規則性を見つける小さい場合を表にする、周期、差を取る頁で読む
  2. 8-2偶奇で考える偶数と奇数、変わらない量この回
  3. 8-3余事象少なくとも 1 つは全体から引く頁で読む
  4. 8-4包除原理重なりを足して引く頁で読む
  5. 8-5小問題に分ける分割統治、小さい答えから大きい答え頁で読む
  6. 8-6対称性入れ替えても変わらない物頁で読む
  7. 8-7上界と下界見積もり、鳩の巣原理頁で読む
  8. 8-8コンテストと試験で確かめる全分野の総まとめ頁で読む

分野 8 の頁へ戻るほかの分野を見る