2025年北海道大学文系 有理数と無理数の間に隔たる高い壁 ~入試問題の先にある面白さ~ - 金沢市・野々市市・白山市の塾なら東大セミナー
2025.03.29一推し入試問題!

2025年北海道大学文系 有理数と無理数の間に隔たる高い壁 ~入試問題の先にある...


 

皆さんこんにちは。東進衛星予備校 金沢南校の北川と申します。

今年も大学入試が終わりました。私も毎年のことながら各大学の特色が出た様々な問題を眺めていましたが、やはりというか面白い問題が多く、1カ月に1本のコラムでは書き足りないほどに豊作と言って良い年でした。

中でも、北海道大学の文系出題には目が留まりました。おおよそ近年における一般入試前期文系の出題とは思えない形式の問題が出ていたからです。

大学入試の数学においては「知っているだけで得点となる」という問題は少ないですが、この、一般に「関数方程式」と呼ばれる分野だけは「この手の出題がありうる」と知っているだけで得点のチャンスが増える珍しいジャンルでもあります。

今回は北海道大学文系第4問の出題にフォーカスし、関数方程式の問題に関するごく初歩的な知識の紹介をして、この問題を実際に解いていきたいと思います。どうぞよろしくお願いいたします[1]

 

この記事では以下の通り知識を仮定します。

1節~3節:高校数学II・Bまでの知識を仮定します。具体的には、指数法則に基づいた計算や、指数関数のグラフが書けることを前提に議論を進めます。

4節:高校数学III・Cまでの知識を仮定します。具体的には、(高校数学における)関数の連続性の定義は既知のものとして扱います。

 

 

[1] 合格速報の記事で予告していた整数問題の解説は来月に後回しします! 今年は東京科学大学の出題が非常に面白かったので、この問題にフォーカスしてみたいと思います。

 

 


目次

1.(1)の解答 ~何をやってよいのか、何をやってはいけないのか~

2.(2)と(3)の解答 ~第二歩目を踏み出せるか?~

3.(4)の解答 ~関数の正体、完全解明?~

4.延長戦 ~実数まで拡張するとどうなる?~

5.おわりに


 

 

1.(1)の解答 ~何をやってよいのか、何をやってはいけないのか~


 

今回扱う問題は次の通りです。

 

関数\(f(x)\)は、すべての実数\(x\)およびすべての整数\(n\)について\(f(nx)=\{f(x)\}^n\)を満たし、さらに\(f(1)=2\)を満たすとする。ただし、\(f(x)\)のとりうる値は\(0\)でない実数とする。

(1) \(f(n)≦100\)となるような最大の整数\(n\)を求めよ。

(2) すべての実数\(x\)について\(f(x)>0\)であることを証明せよ。

(3)\( f(0.25)\)を求めよ。

(4)\(a\)が有理数のとき、\(f(a)\)を\(a\)で表せ。

 

このタイプの出題の特徴は、\(f(x)\)が具体的に与えられておらず、\(f(x)\)が満たす性質についての式が与えられていることです。具体的な関数が与えられていない分、やや抽象的な議論が必要になってきます。

この手の問題は、近年ではほとんど理系での出題がされてきました。それも、大半が微分積分と絡むもので、微積が関係ない問題は難関大のAO入試や医学部入試など、多くの受験生の目に触れない部分で主に出題されていました。

それだけに、一般入試の前期で、しかも文系への出題として関数方程式が出題されることがあるという事実はかなり衝撃的です。大した難易度ではないとはいえ、果たして完答できた受験生、手が動いた受験生はどの程度いたのか気になるほどです。

では、早速この問題を解いていきましょう。まずは「やってはいけないこと」から確認していきます。ある関数を見たときに、うっかりやりたくなるけれどやって良いかどうかわからないことというのはたくさんあります。例えば以下の通りです。

・微分する。

・多項式で置き換える。

・何か知っている形で書けることを仮定してしまう。

今回の式の形だと微分しようとは思わないかもしれませんが、例えばこれが\(f(x+y)=f(x)+f(y)\)みたいな関数方程式[2]だったら、うっかり右辺を微分して情報を得ようとする人もいるのではないでしょうか? 残念ながら世の中には微分できない関数もあるので、正体が分かっていない内に微分するのはいただけません。

同様に、正体が分かっていないのに多項式で表してはいけません。\(f(x)=a_n x^n+a_{n-1} x^{n-1}+⋯\)と置いて良いのは\(f(x)\)が多項式だと確定している時だけです。

とはいえ、今回の問題は上2つで躓く人は少ないかもしれません。ですが、最後の「知っている形だと想定してしまう」というのは結構起こり得ります。

特に、今回の問題は勘のいい人なら\(f(x)\)の正体を途中で察する可能性が高い問題でした(具体的には\(f(x)=2^x\)と表せるのではないかと想像できます)。ですが、あとで詳述する通り、実は問題文の条件だけでは\(f(x)\)の具体的な形を特定することは不可能です。

よって、\(f(x)=2^x\)であることを前提にして議論を展開した瞬間にその答案は無価値になってしまいます。「今どこまでは分かっていて、どこからは分かっていないのか」、これを明確にしないと途中で道を見失うことになります。

では、一体何をしたらよいのでしょうか?

実は、こういう場合はシンプルな手段が役に立ちます。ズバリ、何か具体的に数を代入してみるのです。

まずは分かっている情報を書き出してみましょう。

 

・すべての実数\(x\)およびすべての整数\(n\)について\(f(nx)=\{f(x)\}^n\) ……①

・\(f(1)=2\) ……②

 

②の条件式は、現状唯一この関数がとる具体的な値を与えてくれています。これを利用していい感じに①の式から具体的な情報を引き出していきましょう。

②の式を上手く使うには、①の式に\(f(1)\)の形を作ってみるのが良さそうです。あれこれ考えてみると、すべての実数について①の式が成り立つなら、\(x=1\)を代入してみれば良さそうだと気が付きます。

すると、すべての整数\(n\)について、\(f(n\cdot1)=\{f(1)\}^n\)、つまり\(f(n)=2^n\)が分かります。これは大発見です。なぜなら\(n\)が整数であるなら、\(f(n)=2^n\)がいつでも成り立つということですから、関数の一部分について完全に正体を突き止めてしまったも同然だからです。

そして、\(f(x)\)の整数を代入した時の振る舞いが分かったことによって、(1)が解けることになります。\(f(n)≦100\)というのは\(2^n≦100\)ということですから、これを満たす最大の\(n\)を探すのは容易いでしょう。解答は以下の通りです。

 

\(f(nx)=\{f(x)\}^n\)を以下「条件式」と呼称する。

条件式に\(x=1\)を代入することで、\(f(n\cdot1)=\{f(1)\}^n\)、つまり\(f(n)=2^n\)を得る。

ここで\(n≦6\)のとき、\(2^n≦2^6=64\)であり、\(n≧7\)のとき、\(2^n≧2^7=128\)であるから、\(f(n)=2^n≦100\)を満たす最大の整数は\(n=6\)。

 

丁寧に書いてみてもこの程度の長さなので、思いつけばすぐに解答が得られる問題でした。

 

[2] ちなみに、これは「コーシーの関数方程式」と呼ばれています。

 

 

 

2.(2)と(3)の解答 ~第二歩目を踏み出せるか?~


 

続いて、(2)の解答を考えていきましょう。

すべての実数\(x\)について、\(f(x)>0\)であることを証明するわけですが、これは直接的に証明しようと考えると少し大変です。(最終的にどう書くかはさておき)、色々試す過程で①の式をいじるだけでは、f(x)の正負についてどう考えたらいいのか進みにくいと思います。

こういう場合は背理法を使ってみると考えが進みやすいものです。ただ、一足飛びにやると間違えやすいので気を付けていきましょう。

“問題の条件を満たし、かつ、「すべての実数\(x\)について、\(f(x)>0\)である」ことはない”と仮定します。”「すべての実数\(x\)について、\(f(x)>0\)である」ことはない”というのは、”ある実数\(x\)が存在して、\(f(x)<0\)である”ということです[3]

ということで、そのある実数を1つとってきて\(r\)とし、\(f(r)<0\)としましょう。この\(r\)にまつわる式を立てて、矛盾を導くことを考えます。先ほどの前提を再掲します。

 

・すべての実数\(x\)およびすべての整数\(n\)について\(f(nx)=\{f(x)\}^n\) ……①

・\(f(1)=2\) ……②

 

これを睨んで何か情報がないかを探していきます。①の式をじーっと見ていると、「累乗するときは符号が重要だよなあ」と何となく思い浮かんできます。例えば、どんな実数であっても、二乗すれば\(0\)以上になります。つまり、\(n=2\)を①の式に代入すると、

\(f(2x)=\{f(x)\}^2\)

を得るわけで、この右辺はいつでも必ず正の値を取ることになります。

もうしばらくこの式を眺めていると、「\(x=\frac{r}{2}\)とすれば左辺が\(f(r)\)になるなあ」ということに気が付きます。つまり、

\(f(r)=\{f(\frac{r}{2})\}^2\)

を得るわけです。こうなってしまえばあとは勝ちですね。解答は以下の通りです。

 

ある実数\(x\)が存在して、\(f(x)<0\)であると仮定する。そのような実数のうち1つを取ってきて\(r\)とする。

このとき、条件式に\(n=2,x=\frac{r}{2}\)を代入すると、

\(f(2\cdot\frac{r}{2})=\{f(\frac{r}{2})\}^2\)

つまり、

\(f(r)=\{f(\frac{r}{2})\}^2\)

を得る。\(f(x)\)はすべての実数について定義されており、\(0\)ではない実数値を返すから、\(f(\frac{r}{2})\)は\(0\)でない実数値であり、したがって右辺について\(\{f(\frac{r}{2})\}^2>0\)が分かる。

しかし左辺は定義より\(f(r)<0\)であるから、これは矛盾である。

したがって、すべての実数\(x\)について\(f(x)>0\)である。

 

一応、記述に工夫を凝らせば背理法を使わず答案を書くこともできますが、自然に、簡潔に書くのならこれで良いでしょう。

また、これを使えば直ちに(3)の解答も分かります。以下の通りです。

 

 

\(f(1)=f(4\cdot0.25)\)であるから、①の条件式より、\(f(1)=\{f(0.25)\}^4\)が分かる。

つまり、\(\{f(0.25)\}^4=2\)であるが、\(f(0.25)\)は(2)より\(0\)より大きい実数であることが分かっているので、\(f(0.25)=2^{\frac{1}{4}}\)が分かる。

 

 

[3] 「すべての」を否定すると「ある」になる、というのは数Iのごく初期に習ったのではないでしょうか。時々語尾だけを否定に変えている人がいますが、注意しましょう。

 

 

 

3.(4)の解答 ~関数の正体、完全解明?~


 

ここまで得た情報や、(3)の考察から我々は何となく解答を察しています。後はそれを言語化していくだけです。

まず、\(a\)が有理数ということは、適当な互いに素である整数\(p,q\)(ただし\(q≠0\))が存在して、\(a=\frac{p}{q}\)と書けるはずです。これを条件式に代入して考えていくと、\(f(a)=f(\frac{p}{q})=f(p\cdot\frac{1}{q})=\{f(\frac{1}{q})\}^p\)だと分かりますから、\(f(\frac{1}{q})\)の値を考えれば良さそうです。

これは(3)と同様に考えればすぐに分かります。解答は簡潔化のために思考とは逆順に書いていくのが良いでしょう。以下の通りです。

 

\(a\)は有理数であるから、ある整数\(p\)と、\(p\)とは互いに素である正の整数\(q\)が存在して\(a=\frac{p}{q}\)と書くことができる。
\(p=1\)のとき、条件式にて\(n=q,x=\frac{1}{q}\)とすると、\(f(q\cdot\frac{1}{q})=\{f(\frac{1}{q})\}^q\)より、\(\{f(\frac{1}{q})\}^q=2\)が分かる。

\(f(\frac{1}{q})\)は\(0\)より大きい実数であるから一意に定まって、\(f(\frac{1}{q})=2^{\frac{1}{q}}\)である。

\(p≠1\)のとき、条件式にて\(n=p,x=\frac{1}{q}\)とすると、

\(f(\frac{p}{q})=f(p\cdot\frac{1}{q})=\{f(\frac{1}{q})\}^p=\{2^{\frac{1}{q}}\}^p=2^{\frac{p}{q}}\)

が分かる。

以上より、\(a\)が有理数であるならば、\(f(a)=2^a\)である。

 

分母を常に正にするというトリックにより、\(q\)の正負での場合分けを減らすことができます。いずれにせよ、なんと\(f(x)\)の有理数での振る舞いも分かってしまいましたね。

驚くべきことに、与えられた条件式からこれだけのことが明らかになってしまうのです。1つの抽象的な式が、実に多くの情報を含んでいるというのは非常に面白いものですね。

 

 

 

4.延長戦 ~実数まで拡張するとどうなる?~


 

……さて、\(f(x)\)は定義域を有理数に限れば、\(f(x)=2^x\)に限ること[4]が上記より明らかになりました。ですが、問題文では\(f(x)\)の定義域はすべての実数とされています[5]

では、定義域を実数全体まで延ばしたとしても、問題文の条件を満たす関数は\(f(x)=2^x\)に限るのでしょうか? 有理数まで順調に拡張できたのだから、それが実数に変わったところで大して変わらないのでしょうか? はたまた、有理数と実数の間には何か大きな壁があるのでしょうか?

 

(予想)
「関数\(f(x)\)が、すべての実数\(x\)およびすべての整数\(n\)について\(f(nx)={f(x)}^n\)を満たし、さらに\(f(1)=2\)を満たす」

ならば

「関数\(f(x)\)が、すべての実数\(x\)について\(f(x)=2^x\)を満たす」

と言えるか?

 

少し文章を読む手を止めて、実際に考えてみてください。

 

 

 

 

 

▼▼▼以下で結論を述べています。スクロールに気を付けて!▼▼▼

 

 

 

 

さて、どうだったでしょうか。

頑張っていただいた方には残念なことですが(面白いことに?)、実数全体に定義域を広げた場合は、必ず\(f(x)=2^x\)だとは言い切れません。

「なんだそりゃー!」と思うかもしれませんが、例えば以下のような関数が反例として考えられます。

\begin{eqnarray}
f_1 (x)=
\begin{cases}
2^x (xが有理数)\\
1(xが無理数)
\end{cases}
\end{eqnarray}

2つの関数を組み合わせたような関数を考えてみました。これも、\(x\)が決まればただ1つに\(f_1 (x)\)の値が決まるので(高校数学で言うところの)関数の定義に当てはまっています。

ますます「そんなのアリかよー!」という声が聞こえてきそうです。実際にこれが先ほどの条件①と②を満たすことは高校数学の範囲で簡単に確認できます。

 

 

(証明)

先に提示した関数\(f_1 (x)\)は問題の条件を満たすことを示す。

・\(f_1 (1)=2\)は明らか。

・すべての実数\(x\)およびすべての整数\(n\)について\(f(nx)=\{f(x)\}^n\)について、

\(x\)が有理数であるときは代入することで確かめられる。

\(x\)が無理数であって\(n=0\)のとき、左辺は\(f_1 (0)=1\),右辺は\(\{f_1 (x)\}^0=1\)より条件を満たす。

\(x\)が無理数であって\(n≠0\)のとき、\(nx\)は明らかに無理数であるから、\(f_1 (nx)=1\)であり、\(\{f_1 (x)\}^n=1^n=1\)であるから、条件を満たす。

以上より、先に提示した関数\(f_1 (x)\)は問題の条件を満たすが、すべての実数\(x\)について\(f_1 (x)=2^x\)を満たしていない。

 

このように、有理数のときの振る舞いだけが分かっても、実数全体のときの振る舞いまで決定できるわけではないのです。

この事実だけでもかなり面白いですね。

ですが、ここで終わってしまっては勿体ない。

 

次に話題としたいのは、「問題文の条件に加えてどんな条件を課せば、すべての実数について\(f(x)=2^x\)だと言えるのか」という問いです。要するに、無理数のときの振る舞いを有理数側に「無理やり合わせてしまう」にはどんな条件を課せばよいのか? ということです。

これは厳密に考えると高校範囲を飛び出してしまうのですが、大枠であれば高校範囲で理解できる内容になりますので、少し説明していきます。

先ほどの関数\(f_1 (x)\)について考えてみると、\(x\)が無理数のときはどこまで行っても一定の値になっています。一方で、\(2^x\)は\(x\)が大きくなるにつれていくらでも大きくなっていきますから、いわゆる「単調増加」です。

こう見ると、単調増加性、つまり「任意の実数\(x,y\)について、\(x<y\)ならば\(f(x)<f(y)\)である」という条件を課してみてはどうでしょうか。実はこうすると、すべての実数\(x\)について\(f(x)=2^x\)であることが言えてしまいます。

まず準備として、無理数\(α\)を1つとります。その\(α\)に対して、次の2条件を満たす有理数の数列\(\{x_m\},\{y_m\}\)を用意します。

 

・任意の正の整数\(m\)に対して\(x_m<α<y_m\)

・\(\displaystyle\lim_{m \to \infty}⁡x_m=\displaystyle\lim_{m \to \infty}⁡y_m =α\)

 

イメージとしては、\(α\)の周りを上と下から徐々に挟み込んでいくような2つの数列を用意するということです。

例えば、\(α=√2\)とした時は、以下のような数列がこの2条件を満たします。

・\(\{x_m\}\)は「第\(m\)項目が\(√2\)の十進小数展開を小数点以下\(m\)桁目で打ち切った数」である数列

(つまり、\(\{1.4,1.41,1.414,1.4142,1.41421,1.414213,1.4142135,1.41421356,…\}\)という数列)

・\(\{y_m\}\)は\(y_1=2,y_{m+1}=\frac{1}{2} (y_m+\frac{2}{y_m} )(m=1,2,3,…)\)で定義される数列

同様にして、すべての無理数に対してこのような数列の存在を認める[6]と、以下のようにして証明ができます。

 

用意した数列の性質と関数の単調増加性から\(f(x_m )<f(α)<f(y_m)\)を得る。

\(x_m,y_m\)は有理数であるから、\(2^{x_m}<f(α)<2^{y_m }\)である。

各辺の\(m→∞\)についての極限を取ると、\(x\)についての関数\(y=2^x\)の連続性より、

\(\displaystyle\lim_{m \to \infty}2^{⁡x_m}=\displaystyle\lim_{m \to \infty}⁡2^{y_m}=2^α\)

であるから、はさみうちの原理より

\((\displaystyle\lim_{m \to \infty}f(α)=)f(α)=2^α\)

を得る[7]

 

ということで、任意の実数\(x\)に対して\(f(x)=2^x\)が満たされると言ってよいわけですね。

他にも、「\(f(x)\)が定義域全体で連続である」といった条件を課すことでもすべての実数\(x\)について\(f(x)=2^x\)であることが示せます(ただし高校範囲を完全に超えるので、ここでは解説しません)。

難関大学の入試問題は、ただそれだけでも面白いものが多数あります。ですが、その背景にある数学的な内容に注目すると更に面白さが深まっていくもので、こうした楽しみ方ができるのもまた良問が持つ1つの性格なのかもしれません。

 

 

[4] そしてもちろん が所与の条件を満たすことも明らかです。

[5] 明示的には書いていませんが、条件①から、少なくともすべての実数について定義され、\(0\)以外の実数値を返すことは明らかにされていますから、定義域は実数全体で、終域(高校数学的には値域)は\(0\)を除く実数全体として差し支えないでしょう。以下で行われる議論も、この定義域と終域を前提とします。

[6] 本当はこのような数列が存在することを証明する必要がありますが、高校範囲では少し厳しいのでこれらは認めることにします。大学1年生程度の微積分の知識が必要ですが、気鋭の高校生は是非チャレンジしてみてください。

[7] 簡単のため関数の連続性を使って処理しましたが、各辺が正であることに触れて対数をとれば見かけ上この議論は回避できます。使うものを減らしたい人はどうぞ。

 

 

 

5.おわりに


 

今回は、北海道大学文系の問題から、その背景知識までを解説しました。

面白い問題には、面白い背景事情が関わっているものです。

有理数と無理数は、高校ではなんとなくそのような区別があるなあ、という程度で終わってしまうことが多いですが、実はその間には非常に大きな差があります。今回の話だけでなく、例えば、集合の濃度[8]を比べた場合、無理数全体の集合がもつ濃度は、有理数全体の集合がもつ濃度よりも大きいことが知られています(非常にザックリ言えば、有理数全体には番号を振ることができるが、無理数全体に番号を振ることはできない!)。

また、高校では連続な関数、更には微分可能な関数を多く扱う為、そのような関数ばかりしか存在しないかのように錯覚しますが、実際は奇怪な関数はいくらでもあります。例えば、定義域内のどの点においても連続でない関数や、連続であっても微分可能でない関数は幾らでも考えられます[9]

高校数学の世界は、数学全体という大洋に浮かぶ一角でしかなく、長年にわたる人類の営みの中で整備されてきた小さな島でしかないのです。時には外海に漕ぎ出すことで、自分が住む島の新たな見方が楽しめる、かもしれません。

 

来月は東京科学大学の整数問題に触れて解説していきたいと思います。(私も含む)市井の数学ファンの中にも好きな人が多い「あの数列」がテーマです。

どうぞよろしくお願いいたします。

 

 

[8] 有限集合における「要素の個数」を一般化した概念です。

[9] ディリクレ関数やワイエルシュトラス関数などで検索してみると色々見つかります。

 

 

 

SNSでシェアする
カテゴリ
 

【記事監修者】塾長 柳生 好春


1951年5月16日生まれ。石川県羽咋郡旧志雄町(現宝達志水町)出身。中央大学法学部法律学科卒業。 1986年、地元石川県で進学塾「東大セミナー」を設立。以来、38年間学習塾の運営に携わる。現在金沢市、野々市市、白山市に「東大セミナー」「東進衛星予備校」「進研ゼミ個別指導教室」を展開。 学習塾の運営を通じて自ら課題を発見し、自ら学ぶ「自修自得」の精神を持つ人材育成を行い、社会に貢献することを理念とする。

ページTOPへ
Instagram X facebook