僕らの研究室

僕らの日常を書きます。

TeXで解く入試数学

2021年、一橋大学の入試で、次のような問題が出題されました。

1000以下の素数は250個以下であることを示せ。

この問題を見た受験生はこう思ったことでしょう。

「1000以下の素数を全部書き出せばいい」

この問題は、たったこれだけのことです。実際に解答を作成すると、次のようになります。

素数の定義さえ知っていれば小学生でも解ける問題です。なぜ天下の一橋大学がこのような問題を出題したのか。理解しがたいですね。


ーーーーーーーーーーーーーーーーーーーーーーーーー


さて、茶番はこのくらいにしておきましょう。

皆さん、TeXはご存知ですよね。僕のブログでは過去に何度も登場していますが、要は数式を含む文書を綺麗に作成するもののことです。

以下、数学科の人などにとっては「そんなの知ってるよ!」という説明がいくらかあると思いますが、どうかお付き合いください。また、専門的な用語が出てくることがありますが、わからない人は読み飛ばしていただいて大丈夫です。

今一度上の画像を貼ります。

問題のタイトルはこの記事のものにしておきました。

画像を見ていただければわかる通り、この解答では1000以下の素数をすべてかき出しています。

「全部打つの大変だったねー」という感想が聞こえてきそうですが、じつはこれ、自分で2,3,5,…と打ち込んでいるわけではないのです。

"TeXは文書を作成するもの"と認識している人は少なくないと思っています。\sumと打てばΣ(シグマ)を出力してくれて、\alphaと打てばα(アルファ)を出力してくれる。このような、直接見た目に変化をもたらすものを扱うことがほとんどです。

しかし、その内部では様々なことを理解し、実行してくれています。例えばカウンター。align環境などは自動で式番号を振ってくれますが、TeXは現在の式番号をきちんと覚えていて、次の番号へいくときにはカウンターを1進めて出力するということを行っています。

また、TeXで作成した文書が美しいのも、TeXが行ごとに並べる文字数を決め、その行の文字と文字の間隔を適切に決めてくれているからです。

わかりやすく言えば、TeXは空気を読んでくれるのです。だから、綺麗な文書が簡単につくれるのです。

というわけで、TeXは立派なプログラミングなのです。もちろん、計算に広く用いられている言語たちに比べると、TeXにできることはないといってもよいほど些細ですが、それでも1000以下の素数を見つけきるくらいのことはできます。

ちなみに10000程度で計算に死ぬほど時間がかかります。あまり無理をさせてはいけません。

さて、少し長くなりましたが、素数を見つけるコマンドのソースを公開します。なお、作成者は僕ではなく保護者くんです。このくだらない記事のために15分ほどかけてつくってくれました。

以下をプリアンブルにかきます。画像が2枚になってしまったのはごめんなさい。

細かい説明は後にしますね。本文は次のようになっています。

question環境やkaitou環境は僕が勝手につくったものなので、このままこれを写してもエラーを吐きます。記事の最後に、PCで閲覧してる人に向けてコピペできる形で自作のパッケージを取り除いたソースを残します。

まあ、誰が使うねんこんなもんって感じですけど。

では、軽く解説していきますね。見る人が見ればわかると思うので、そういった人は読まなくてOKです。

まず大まかに説明します。Aを変数と思って、Aに2から1000まで順に代入していくことを考えます。初めはA=2です。このAに対して、2からA-1までの数で割り切れるかを判定しています。割り切れればAは素数ではないということなので、Aの値を1増やします。2からA-1のどの数でもAを割り切れなければ、Aは素数です。その値を出力して、Aの値を1増やし、次のAに対して同じことを行います。これを1000まで繰り返します。これが、素数を出力しきるアルゴリズムです。

ちなみに、素数を出力するたびに値を1増やすカウンターを用意しているので、「個数は168個である」の部分もそのカウンターの値を出力するだけです。

細かい話をしていきます。素数の間の, (カンマ)は、3以上の素数の直前に出るようになっています。素数を出力してから, を出すようにするには、最後の素数が最後のものであることを取得しなければなりません。そうしないと、上で997の後にも, が出てしまいます。997が1000以下の最後の素数であることを判定するにはそれなりの手間がかかるので、先に, をかいてから数を出力するようにしています。

それから、上では単に「割り切れるかどうかを見る」というふうにかきましたが、TeXには割り切れるかどうかを判断する能力はありません(少なくとも、私は知りません)。しかし、「ある数がある数に等しいかどうかを見る」ということはTeXにもできます。また、レジスタに対して四則演算を施すこともできます。

しかし、これだけでは素数判定はできません。ここで、TeXのある機能を逆手にとります。 これがこのプログラムの肝といってもよいでしょう。

TeXは、カウンターレジスタのような整数値のみをとるレジスタに対して割り算を行ったとき、その計算結果では少数を切り捨てるのです。だから、4を2で割ると2ですが、5を2で割っても2なのです。ということは、割り切れるかどうかは「割るときに使った数を割った結果に掛けて元に戻るかを見ればよい」ということになります。

以上がソースコードの解説になります。


いかがだったでしょうか。後半は読者の大半を置いてけぼりにしてしまったような気がしますが、たまにはこのような記事もよいでしょう。

最後にソースコードを貼っておきますから、興味があれば遊んでみてください。

ではでは!!

※改行がイカれてる可能性があります。適宜空気を読んで直していただければと思います。

\documentclass[dvipdfmx,12pt]{jsarticle} \makeatletter \newif\ifSOSUU \newif\ifTWO \SOSUUtrue \newcount\@tempcntc \newcount\@tempcntd \newcount\@tempcnte \newcommand{\sosuu}[1]{% #1以下の素数は, \TWOtrue \@tempcnta\@ne \@tempcntc\z@ \@whilenum\@tempcnta<#1\relax \do{% \advance\@tempcnta\@ne \@tempcntd\@tempcnta \@tempcntb\@ne \@tempcnte\@tempcnta \advance\@tempcnte-\@ne \@whilenum\@tempcntb<\@tempcnte\relax \do{% \advance\@tempcntb\@ne \divide\@tempcnta\@tempcntb \multiply\@tempcnta\@tempcntb \ifnum\@tempcnta=\@tempcntd\relax \SOSUUfalse \fi \@tempcnta\@tempcntd }% \ifSOSUU \advance\@tempcntc\@ne \ifTWO\TWOfalse\else, \fi \the\@tempcnta \fi \SOSUUtrue }% であり,個数は\the\@tempcntc 個である. } \makeatother %%%%%%%%%%%%%%%%%%%%%%%%%ここから本文%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} \noindent 【\textbf{\TeX で解く入試数学}】\par 1000以下の素数は250個以下であることを示せ.\par \noindent 【\textbf{解答}】 \sosuu{1000}% これで示せた. \end{document}

教採対策あるある

これを書いている今は2022年6月10日。

2022年になって最初の投稿になります。

あけましておめでとうございます。

じつは今年に入ってから何度も記事を書こうとしたのですが、なんやかんやあって公開されることはありませんでした。

というわけで、下書きには5つほど「あけましておめでとうございます」から始まる記事があります。

教採対策の時期がやってきました。

僕含め僕の周りには教員志望の人が多いので、研究室は僕のところも隣も教採対策モードです。

ということで、タイトルの通り今回は、教採対策をする中でのあるあるをいくつか書こうと思います。

共感してもらえる部分は少ないかもしれませんが、暇つぶしにどうぞ。では、参ります。

あるある1:教採対策ブログめっちゃ見る

これはもう間違いないでしょう。教採受験生なら目から血が出るほど見ます。

記事もよいのですが、なんと言ってもYouTubeにあるおまとめプリントの解説動画が素晴らしい。

要点は絞られているし、先生の解説もわかりやすい。

なんか宣伝みたいになってますね。

あるある2:教採対策ブログの動画、最初の挨拶でどの回かわかる

あるあるとまでは言えないかもしれませんが、解説動画を画面が割れるほど見た僕はこの域に達しました。なんなら台詞を同時に言えるまであります。

教採対策で友人と教職教養の問題を出し合っているときには、「教採対策ブログの人が言ってた」が僕らの口癖になっていました。

宣伝してるわけではないですよ。

あるある3:教採対策ブログの人どんな人なんかな〜って思って顔見たら割と思った通りの顔

先生って感じの人です。ありがとうございます。

あるある4:一般教養ムズすぎ

「○○という本が出版されたのは何年前?」

みたいな問題が出ます。うん○こです。誰がわかるねん。

あるある5:模擬授業でどうでもいい日付書きがち

1月1日に授業するヤバい先生もいます。

あるある6:普段皆で勉強してるのにハブられたとき自分がいない間に何してたか細かく聞きがち

差をつけられたくないので。

あるある7:勉強せずにYouTube見てる友人見て安心する

差をつけられるので。

あるある8:試験1週間前むしろ遊びがち

直前は何してもあまり変わらないですから。

あるある9:大事な情報は一緒に受ける知人には隠しがち

友人ではなく、知人であるところがポイントです。

あるある10:結局公共の精神って何かわからん

わからん。

あるある11:『文部科学大臣』答えにならないがち

意外とこの人が答えになる問題少ないんですよね。

あるある12:面接練習のときの友達厳しすぎ

やられたらやり返す。

あるある13:高校の頃使ってた問題集のレベルちょうどよすぎ

クリア○とか重要問題○とかですね。

あるある14:積分計算しきれないがち

頼む。回転するな。

あるある15:試験前日ラーメン食いがち

美味すぎる。

あるある16:試験本番、同じ教室に女子いると嬉しいがち

数学する女子はいいぞ。



それではまた。

パルキアって、ディアルガより強くね?

T嶋「パルキアってディアルガより強いよね」

僕「多分戦ったらディアルガが勝つけど」

T嶋「ディアルガは時間を司るじゃん。でも、パルキアは " 空間 " を司るんだよ」

僕「というと?」

T嶋「ベクトル空間のようなものと考えると」

僕「なるほど、次元で比べるのね。ディアルガが関与できるのは時間という1次元のものだけど、パルキアはn次元の空間に関与できると考えたらパルキアの方が上かもね。ディアルガ大したことないやん」

T嶋「多項式だったら、ディアルガは2回微分されたらおしまいだし」

僕「ディアルガ大したことないやん」

T嶋「しかもディアルガときのほうこう撃つと反動あるけど、パルキアないからね。なんでか知らんけど」

僕「パルキアは両肩で玉が2つあるから、じつは反動はあるんだけど、右撃って休ませてる間に左で撃てるんじゃね?」

T嶋「なるほど、だからあくうせつだんには反動がないのか。ダイヤモンド買お」

僕「ポケモン楽しみだね」

『人』という字は人と人とが支え合っているというけど・・・

ただの雑談の記録です。

ーーーーーーーーーーーーーーーーーーーーーーーー

T嶋「『人』という字は人と人とが支え合っているって言うけど、長い方は楽してるから支え合ってはないよね」

f:id:shito_1050:20211105133238j:plain

保護者「長い方があるかは字体によるけどね。ケータイで打つと、長さは等しいよ」

僕「それよく聞く話だけどさ、実際は支え合ってるよね。長い方が無くなったら短い方倒れるし」

保護者「『支え合っている』ってのは、割合の話をしてるわけじゃないからね。長い方がいくら楽でも、0になったときに短い方が倒れるんじゃ、支え合っているということに嘘はないね」

僕「それに、一概に短い方が辛いとは言えないかもね。長い方めちゃくちゃ軽いかもしれないし。軽すぎたら短い方倒れるけど」

T嶋「それは摩擦係数によるんじゃない。接してる部分全部の摩擦係数が1だったら倒れないよ」

保護者「難しいね」

僕「支え合って生きていこうよ」

鬼舞辻無惨って数学やればよくね?

ただの雑談の記録です。

ーーーーーーーーーーーーーーーーーーーーーーーー

僕「鬼滅の刃のさ、鬼舞辻無惨ってさ、間違えないんだよね」

T嶋「私は何も間違えないって言ってるしね」

僕「あいつ、数学やればよくね?」

T嶋「確かに。あいつがやると全部正しいもんね」

僕「いいなあ」

T嶋「鬼舞辻無惨って、背理法使えなくね?」

僕「確かに。背理法って、最後に仮定が間違いだったって言うもんね」

T嶋「√2が無理数なことどうやって示すんだろ」

T嶋「でもさ、今の時代、間違えないより間違えてもすぐ修正できますの方が求められてるよね」

僕「どこに着地するつもりなのこの話」

T嶋「就活の面接でさ、私は間違えませんって言った人とりたいと思う?」

僕「間違えないんだったらとればよくね」

T嶋「間違えないことを証明できないじゃん」

僕「その場で、間違えたことを修正できることを証明するのも難しそうだよね」

T嶋「まあそれはそうか」

保護者「とりあえずその2つだったら間違えても修正できますって言っとくのがいいよね。間違えない人は『間違えたとき』のことは何を言っても真だから」

T嶋「確かに」

ーーーーーーーーーーーーーーーーーーーーーーーー

M下「鬼殺隊の人って、鬼いなくなったら仕事なくなるよね」

僕「あの人たち色々人間離れしてるから、いくらでも仕事あると思うよ」

M下「格闘技の世界大会とかか」

T嶋「あいつら、刀持ってれば強いけど、普通に喧嘩しても強いのかな」

僕「そりゃ強いでしょ。そもそも、あいつら刀で岩切れるくらいの腕力はあるわけだし」

T嶋「刀がめちゃくちゃよく切れるんじゃない?刃の部分の面積が限りなく0に近いとか」

僕「でも某黄猿さんが『速度は重さ』とか言ってるし、しのぶさんのパンチでもボクシング世界チャンプのパンチより重いんじゃない?」

T嶋「でも、元々普通の人間の悲鳴嶼さんでも鬼ボコれてたから、世界チャンピオンくらいなら結構強いパンチ出せそうな気がするけど」

僕「あの人は、強いからね」

T嶋「悲鳴嶼さんは強い」

M下「悲鳴嶼さんは強い」

保護者くんが保護者くんと呼ばれる訳

このブログには、保護者くんと呼ばれる人が登場します。なぜ彼が保護者くんと呼ばれるのか。今回はそれを書こうと思います。どうでもいい内容なので、暇なときに読んでください。


僕は今、大学院の1年生です。まあつまり、大学は無事に卒業したわけです。

卒業できたのは、ほとんど保護者くんのおかげと言ってよいでしょう。

恥ずかしいことなんですが、僕、履修登録自分で出来ないんですよね。

え、そんな大学生いるの?って思いますよね。

いるんですよね。ここに。

保護者くんとの出会いは大学に入ってしばらくしてからで、大学1年生の一番初めの履修登録だけは自分でやらなきゃいけなかったのですが、それも友達に助けてもらいながらなんとかやった感じです。

履修登録って難しすぎませんかね。

いや、本気を出せばできると思います。多分。

いや、無理かな。

無理ですね。

僕、基本的に説明書とか読むのが嫌いなので、何でもなんとなく触りながら理解していくんですよ。

当然、履修案内もその例外ではなく、読もうとすると拒絶反応を示します。

でも、履修登録に触りながら理解していくとかいう概念ありませんからね。

第何群から何単位とってとか、卒業に何単位必要とか、自由履修枠がどうとか、教職科目がどうとか、

わかんないんですよ。

ね、読んでる人は大学生の方がほとんどでしょうが、びっくりですよね。不快にさせたらごめんなさいね。

そして、保護者くんに出会いました。

彼は、それはそれはきちんとしています。

きちんとしてるエピソードを出せばキリがないのでここには書きませんが、とりあえずまあ、きちんとしています。

もちろん、頭がおかしいときもありますよ。

数学科ですからね。そこは安心してください。ちゃんと彼もバグってます。

でも、少なくとも履修登録ができるという点においては、マトモなわけです。

どういった経緯かはもうあんまり覚えてないのですが、大学1年の途中から、彼と一緒に履修登録をするようになりました。

初めは頑張って僕も履修案内を読もうとしたんですけど、完璧に理解している彼がいたので、諦めました。

それは彼も同様で、どうせほとんど同じような進路なので、僕に履修登録について理解させる暇があれば、黙って自分と同じものを登録させればいいやという考えに至ったようです。

じつに合理的です。

履修登録の時期になれば、自動的にLINEに登録すべき授業が送られてきました。

もちろん、取るべき集中講義なども抜け目なく、きっちりと入っていました。

結果として、履修登録のなんたるかを何も知らないまま大学生を終えた人間が誕生しました。

さらに、彼は数学の理解も早い方だったので、まあよくわからんところはとりあえず彼に聞いていました。

あと、プログラミングの授業も僕はさっぱりだったのですが彼が隣にいたので単位を取ることが出来ました。

ちなみに、その授業の評価は僕がSで彼がAでした。根に持っているようで、ずっとチクチク言われます。

加えて、オリエンテーションや健康診断の前日には告知してくれますし、トイックの前日には時計を忘れないように忠告までしてくれます。

こうしてダメ人間が出来上がるのです。

ちなみに、何度か一人暮らしをしている彼の家に泊まったことがありますが、彼は朝6時に起き、僕を6時半に起こしてくれます。

朝ご飯は米と味噌汁と鮭の塩焼きと野菜などという、健康的なものが出された記憶があります。彼曰く、野菜も食べなさいだそうです。


ここまで読めば、彼がなぜ保護者くんと呼ばれるのか、お分かりいただけたと思います。

保護者だから、保護者くんなのです。


大学院生になって、研究室が与えられました。

僕の机の電気には付箋で

「ゴミを捨てる!!」

と書いてあります。

f:id:shito_1050:20211012114505j:plain

彼は未だに、僕の保護者です。


【オマケ】

〜ある日〜

僕「最近さ、イモリ飼いたいと思ってるんだよね」

保「イモリ?ああ、実家で飼ってるよ」

僕「!?」


〜そのまたある日〜

僕「最近鉄道模型に興味あるんだよね」

保「Nゲージ?ああ、実家にあるよ」

僕「僕の興味先回りしすぎじゃないですか?」

休みの日でも早起きして研究室に行くために

ある日の夜中。

僕が一人で勉強をしていると、研究室の扉が勢いよく開きました。

入ってきたのは、米を抱えたT嶋くんでした。

f:id:shito_1050:20210920225838j:plain

そんな我が子のように持たんでも。

中々どうして、本来ならば研究室にあるはずのないものです。

じつは、僕の研究室には数日前から炊飯器がありました。もちろん犯人はこいつです。

米を炊く計画を立ててやがったのです。

T嶋くんは、ほとんど研究室に住んでいるようなもので、Zenly(位置情報共有アプリ)には学校を自宅と判定されています。

炊飯器があったりクワガタを飼っていたりと中々変わった研究室になってきました。

T嶋「よし、勉強しよう」

(数秒後)

T嶋「お腹空いた」

彼は、研究室で炊き込みご飯を作ろうと、その準備に取り掛かりました。

T嶋「ピコーン」

何かを思いついたT嶋くん。

T嶋「米を、明日の朝に予約すれば、絶対早起きして大学来れるんじゃ…?」

確かに、炊飯を予約して大学に来なければ、米を愛してやまないT嶋くんにとっては大ダメージです。

無論それは、スヌーズをスムーズに回避できる目覚ましアプリとは比べ物にならないほどの強制力を発揮するでしょう。

ご飯を食べている彼は、幸せそうです。

この文章を書いているのは、当日です。つまり、上のことはついさっきの出来事です。

今目の前で、T嶋くんは明日誕生日の友人に送るラインのメッセージを考えています。

いかにふざけたメッセージで祝うかを真剣に考えています。


明日、僕は大学に行きません。

彼はきっと、炊飯を予約した時間に大学に行くでしょう。

そして、幸せそうな顔で炊き込みご飯を屠るのです。

そんな彼の笑顔こそ、平和の象徴です。

僕らの研究室のあるべき姿です。

無事炊き込みご飯が炊けることと、彼が寝坊して絶望することを半々くらいに祈って、ペンを置こうと思います。

では、また。