- http://www.yomiuri.co.jp/national/20150120-OYT1T50137.html
- http://www.dnc.ac.jp/albums/abm00004708.pdf*1
以下ではをa(n)と表記します.自然数nに対して,2のn乗の1の位の数をa(n)とし,a(1),a(2),a(3),a(4),a(5)の値を確認してから,a(□)=a(n)となる□を,「5n」「4n+1」「n+3」「n+4」「n+5」の中から選ばせています.
出題の前後関係から,正解は「n+4」なのですが,実は「5n」も該当するので,これも正解とするよう訂正,そして発表したというものです.
入念に用意した出題と選択肢なのに,解いてみると別の正解があった,というのは,回答者数はまったく違いですが自分のプログラミング科目の試験でも,何年か前にやってしまいました.気を引き締めて,これから出題準備をしていかないといけません.
数列の別解に話を戻して,式の操作で何か言えそうと思いましたが,まずはRuby*2で値を生成してみます.
$ pry [1] pry(main)> def f(n); [2**n,2**(n+4),2**(5*n)]; end => :f [2] pry(main)> f(1) => [2, 32, 32] [3] pry(main)> f(2) => [4, 64, 1024] [4] pry(main)> f(7) => [128, 2048, 34359738368] [5] pry(main)> f(31) => [2147483648, 34359738368, 45671926166590716193865151022383844364247891968] [6] pry(main)> f(99) => [633825300114114700748351602688, 10141204801825835211973625643008, 102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487168] [7] pry(main)> def g(n); f(n).map{|k|k%10}; end => :g [8] pry(main)> g(99) => [8, 8, 8] [9] pry(main)> g(7) => [8, 8, 8] [10] pry(main)> def h(n); [2**n,2**(5*n),2**(4*n+1),2**(n+3),2**(n+4),2**(n+5)].map{|k|k%10}; end => :h [11] pry(main)> 1.upto(10){|i|p h(i)} [2, 2, 2, 6, 2, 4] [4, 4, 2, 2, 4, 8] [8, 8, 2, 4, 8, 6] [6, 6, 2, 8, 6, 2] [2, 2, 2, 6, 2, 4] [4, 4, 2, 2, 4, 8] [8, 8, 2, 4, 8, 6] [6, 6, 2, 8, 6, 2] [2, 2, 2, 6, 2, 4] [4, 4, 2, 2, 4, 8] => 1
f(n)は,2のn乗と2のn+4乗と2の5n乗からなるアレイを返します.g(n)は,そのアレイ(f(n)の戻り値)の各要素を10で割った余りを返します.nにどんな自然数を与えても,3つの値の1の位は一致します.
h(n)は,a(n),a(5n),a(4n+1),a(n+3),a(n+4),a(n+5) *3という6つの値からなるアレイを返します.そして「1.upto(10){|i|p h(i)}」により,nが1から10までの,6つの値を出力します.各アレイの1番目,2番目,右から2番目の値はどの行も同じ値であり,n≦10に関してはa(n)=a(5n)=a(n+4)なのが確認できます.
式操作を試みたところ,「a(n)=a(n+4)ならばa(n)=a(5n)」が示せるのに気づきました.a(n)=a(n+4)は,周期的な数列であり,a(n)=a(n+4)=a(n+4+4)=…なので,任意の自然数kに対してa(n)=a(n+4k)が言えます.そこでk=nとおくと,a(n+4n)=a(5n)もまたa(n)に等しい,で証明終わりです.a(n)=a(n+4k)を示すにも,数学的帰納法を使えばいいので,いわゆる受験数学の範囲で証明できることを意味します.
「a(n)=a(n+4)ならばa(n)=a(5n)」は,a(n)の定義によりません.センター試験の問題文から離れて,a(n)=a(n+4)を満たす数列{a(1),a(2),…}に関しては,必ず,a(n)=a(5n)が成立します*4.
逆は真ならずです.「a(n)=a(5n)ならばa(n)=a(n+4)」*5には反例があります.nが5の整数乗*6のときa(n)=1,そうでないときa(n)=0と定めたら,任意の自然数nに対してa(n)=a(5n)ですが,a(5)≠a(9)です.