けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

「数式の多い解説」の読み方について

競プロの上達のためには、解けなかった問題の復習がとても大切になって来ます。

しかし、そんなことは分かっていても「解説を読んで分からないことが多々ある」ことが大きな壁になっていると感じる方も多くいると思います。とくに、数式が多いと難しく感じられてしまう傾向にあるようです。

個人的には、最近の ABC の公式解説が分かりにくいとは思わないので、解説に頑張って読み解いていくことは、どうしても求められると思います。数式ばかりの解説は最初は辛いかもしれませんが、いくつか読み解くコツがあります! 

この記事では、僕の思うコツをいくつか挙げたいと思います。今後の解説 AC の一助となれたら嬉しいです!

題材として、次の問題を扱います。

atcoder.jp

 

コツ 1:分からない言葉は調べる

まず、解説を読んで分からない言葉があったら、その言葉がわかるようにしましょう!

たとえば、上に挙げた問題の解説は次の文章で始まります。



まず、冒頭の「正整数  K が、〜を用いて、〜と素因数分解できる時、」の部分はどうでしょうか1。数式の多い文章を読み解くためには、一行一行ごまかさずに読むことがとても大切だと思います。

もしこのフレーズが理解できないと感じたならば、素因数分解の理解が曖昧なのかもしれません。

そのことを簡単にチェックできる方法があります。それは「自分は素因数分解とは何かを人に説明できるだろうか」をセルフチェックするのです。もしそれに不安を感じたならば、素因数分解のちゃんとした理解には至っていないということが分かります。

その場合は、素因数分解とは何かが分かるまで、さまざまな本を読んだり、各種資料を読んだりしてみましょう。オススメは『黄色チャート2です。黄色チャートには、素因数分解も載っています!

Amazon.co.jp: 新課程チャート式解法と演習数学1+A : チャート研究所, チャート研究所: 本

 

コツ 2:具体的な数値を入れてみる

これは絶対にやるべき作業だと思います!

誰だって、よほど分かっている内容でない限り、数式で書かれた文章をそのままの形で理解することは困難です。

そこで、具体的な数値を入れて確かめてみるのです。この習慣は、AtCoder コンテストにおいて、自分のプログラムをテストするためのケースを手元で確かめるスキルを向上させるのにも役立ちます!

たとえば、先ほどの解説の冒頭の


整数  K が、異なる素数  p_{1}, p_{2}, \dots, p_{m} および正整数  a_{1}, a_{2}, \dots, a_{m} を用いて  K = p_{1}^{a_{1}} p_{2}^{a_{2}} \dots p_{m}^{a_{m}} と素因数分解できる時、


について、実践してみましょう (素因数分解を知っているものとします)。 K = 300 を素因数分解すると、

 300 = 2 \times 2 \times 3 \times 5 \times 5

というように、素数の積に分解できます。これは指数を用いると

 300 = 2^{2} \times 3^{1} \times 5^{2}

と書けます。つまり、先ほどの記号に合わせると

  •  m = 3 (素因数は  2, 3, 5 3 種類なので)
  •  p_{1} = 2 a_{1} = 2
  •  p_{2} = 3 a_{2} = 1
  •  p_{3} = 5 a_{3} = 2

とした上で、

 300 = p_{1}^{a_{1}} \times p_{2}^{a_{2}} \times p_{3}^{a_{3}}

と書けることが分かります。このように、具体的な数値を当てはめることで、意味不明に思える文字に対しても実感が持てるようになります。

 

コツ 3. 同値性を常に確認する

条件  X と条件  Y が同値であるとは、


  •  X が成り立つならば、 Y が成り立つ
  •  Y が成り立つならば、 X が成り立つ

ことを言います。たとえば、配列に含まれる値  v について、

  •  v が配列の中で最小の値である
  • 配列の各要素を小さい順にソートしたとき、配列の先頭の値が  v である

は同値です。「配列中の最小値を求めよ」という問題に対して、普通に for 文を用いる解法もありますが、ソートして先頭の要素を答えるという解法もあります。その解法の正当性は、上述の同値性が成り立つことによって支えられるのです。

AtCoder の問題を解くためには、条件を言い換えていくことが正攻法となることが非常に多くあります。つまり、分かりにくい条件  X に対して、より扱いやすい同値な条件  Y を見つけることによって、問題が解けることが多いのです。

したがって、AtCoder の問題の解説においても、条件を同値なものに言い換えている箇所が多々登場します。このことを分かっていると、解説を読むときに一息おいて「一旦ここを整理しよう」という気持ちを整えやすいです。

たとえば、先ほどの解説においても、次の文面が登場します。


(前略)

正整数  X K の倍数であることは、「任意の  1 \le i \le m について、 X p_{i}^{a_{i}} の倍数である」ことと同値です。


何と何が同値なのかを整理しましょう。 K K = p_{1}^{a_{1}} p_{2}^{a_{2}} \dots p_{m}^{a_{m}} と素因数分解することを前提として、

  •  X K の倍数である
  • 任意の  1 \le i \le m について、 X p_{i}^{a_{i}} の倍数である

が同値であると主張しています。

具体的な数値を入れてみる

ここで一旦、コツ 2 と同様に、具体的な数値を入れてみましょう。 K = 12 とします。 K = 2^{2} \times 3^{1} と素因数分解できることから、

  •  X 12 の倍数である
  •  X 4 の倍数であり  3 の倍数でもある

が同値だとなります。かなり納得しやすくなったのではないでしょうか。余裕があれば、一応ちゃんと示してみるとよいでしょう。つまり、

  •  X 12 の倍数であるならば、 X 4 の倍数であり  3 の倍数でもあること
  •  X 4 の倍数であり  3 の倍数でもあるならば、 X 12 の倍数であること

を両方とも示すのです (意外と難しいと思います)。

数学的な記述を読み解くためには、「示す」訓練を積むことも大変有効です。

 

コツ 4:数学特有の言い回しをストックする

数学の文章では、独特の言い回しが多々あります。例を挙げると......

  • 「〜と〜は同値である」
  • 任意の  i について、〜〜〜」
  • 「〜〜〜を満たす整数  x存在する
  • 「〜であることは、〜であるための必要条件です」
  • 「最後に、十分条件であることを確認しましょう」
  • 「〜は、〜を用いて、〜と書ける

などです。こういった論理に慣れていくことが大切です。難しいと感じるかもしれませんが、人間の言葉と違って、数学的な言い回しはバリエーションは少ないです。一度慣れてしまえば応用が効きます。

なお、数学的な言い回しに慣れるために個人的なオススメなのは、『黄色チャート 数学 I・A』の単元「集合と命題」をやることです。

 

コツ 5:一行理解できたら喜ぶ

精神論的な主張になりますが、競プロの精進においてメンタル管理はとても大事だと思います。人間は誰でも、億劫に感じることは避けがちなものです。有効なトレーニングに対しては、億劫に感じるよりも、楽しいと感じる方が上達しやすいでしょう。

数学の世界では、教科書を 1 ページ読むのに数日かかることもザラだとよく言われます。一行を読み解くのに数時間かかることもよくあります。

したがって、解説を一行読むのに数時間かかったとき、「時間を無駄にした......もっと分かりやすい解説なら 10 分で分かったはずなのに......」と思うのではなく、「ちゃんと理解できた!この数時間で経験値が大幅に up したに違いない」などと思う方がいいと思います。

実際、一度時間をかけて難しい文を理解すると、次に似たような文を見たときに理解が速くなります。

 

おわりに

ここに挙げたコツは、どれもすぐに身につく代物ではないかもしれません。しかし、数式の多い文章を読み解くスキルは、鍛錬を積み上げることで確実にできるようになります!


  1. 個人的には、「 K が、〜と素因数分解できる時」という言い回しは避けた方がよいとは思います。「素因数分解できる時」と書くと、「素因数分解できない場合もあるのかな......」という不安を与えると思います。実際には、2 以上の整数は常に素因数分解できます。この部分は「 K を、〜と素因数分解します。このとき、〜」という言い回しを採用した方がベターだと思います。
  2. チャート式は、白色・黄色・青色・赤色の順に難しくなります。多くの学校は、青色をやらないと大学受験に通用しないのではという考えから、生徒に青色をやらせる傾向があります。しかし、黄色を本当にやり込めば、偏差値 55 までは十分通用することはもっと知られていいと思います。また、黄色と青色の差分は「受験に特有のテクニックが学べるか」にあるので、受験が今更必要でない大人にとっては、青色を手に取る必要性はあまりないと思います。