いきなりですが問題です.
- かけ算の九九の表の中で,現れる数が一番多いのは,どれで,何回でしょうか.
- 1から81までの数を,「○×△=数」という,2つの正整数の積で表したとき,そのような式が一番多いのは,どれで,式はいくつでしょうか.
二つの問題の答えは異なります.数として64を例にとると,九九の表では8×8=64だけです.しかし,2つの正整数の積だと,1×64,2×32,4×16,8×8,16×4,32×2,64×1の7つがあります.
本日のエントリのタイトルは,学習指導要領からです.2012年3月6日(ジェットコースター問題)のキーフレーズでもありました.
ここで,本を1冊,紹介します.

- 作者: 田中博史
- 出版社/メーカー: 東洋館出版社
- 発売日: 2012/03/31
- メディア: 単行本
- この商品を含むブログ (2件) を見る
本題でないところから2項目.まず,国語教師の二瓶弘行氏が,pp.62-63にメッセージを寄せていますが,その2ページのキーワードの一つが「夢」です.「夢の学級集団」への言及があります.
何に引っかかったのかというと,その内容ではなく,ここ数日,行き帰りのバスの中で『学習経験をつくる大学授業法 (高等教育シリーズ)』を読んでいるのですが,その中にも「ドリーム」を語ることの重要性が記されているのです*1.そんなわけで,直接関与しない小学校の算数教育と,職務の一つである大学の教育とが,リンクしたのでした.
もう一つは,かけ算(乗法)理解のためのカルタの解説です.1〜2年生向けと思われる,たし算・ひき算とほんの少しかけ算で構成されるカルタと,九九のカルタがあります.前者のカルタについて,こんな解説が入っています.
本当にかけ算の表現がわかるかどうかを試すため,次のようないじわるな文章も入っている。
2こで1パックのプリンと,5こで1パックのプリンを1パックずつかいました。
「1パック」「ずつ」というような表現があると,かけ算だとすぐに考えてしまう子どももいて,これで2×5とする子がいる。
でもこの文章を絵にすると,次のようになる。
(図省略)
そうである。
単純なたし算の問題なのである。
(p.38)
ビジュアル九九カルタについては,1枚の読み札の表裏が,上の引用と同じページに載っていました.
最近,当雑記での関心が弱くなってきた,《BA型》の文章題です.
それよりむしろ,8行3列のアレイ図の色と囲み方が気になりました.これは次のページで,疑問が解消できました.
アレー図は交換法則を説明したりすることも視野に入れ,いずれは抽象化していくことを目的として使うものである。しかし,教科書などもそのプロセスとしての位置づけのため各列に色がつけられている。そのためこの学年では,3×5と5×3は答えの数が同じであるという程度であって,状態自体は異なるものとしている。
そこで,それぞれの式に対応させてどれをひと固まりとして見ているのかをわかるようにするため,私の作ったアレー図では一つ分を薄く枠取りしてある。
これは意図的である。
(p.39)
工夫の入った,楽しそうな教具です.購入できたらいいのですが.
それでようやく,本題です.その本のp.41に,〈九九表の中に1回しか登場しない数〉〈九九表の中に2回登場する数〉〈九九表の中に3回登場する数〉〈九九表の中に4回登場する数〉とで,絵札のキャラクターの表情が異なることが示されています*2.
九九表の中で5回以上登場する数がないのか,というと,表を見て実際に数えるか,マークしていくのが一つの方法でしょうね.
6,8,12,18,24の5つの数はいずれも,4回出現しています.5回以上は,ありません.これが,冒頭に書いた「かけ算の九九の表の中で,現れる数が一番多いのは,どれで,何回でしょうか.」の答えとなります.
ここで,九九の最大値81に比べると,比較的小さな値ばかりが,最大値となっているのが,少し気になります.もちろん「九九」だからであり,かけられる数もかける数も,1から9までの整数という制約があるからなのですが.
「表を目で見て」とは別の,確認方法はというと…プログラミングでしょう.Rubyで書きました.
#!/usr/bin/env ruby # -*- coding: utf-8 -*- # kukusol9.rb 1.upto(81) do |n| s = 0 1.upto(9) do |a| b = n / a if b <= 9 && a * b == n s += 1 puts "%d*%d=%d" % [a, b, n] end end if s > 0 puts "[%d:%d]" % [n, s] end end
「b = n / a」という式について,Rubyでは整数÷整数は整数となるため,小数点以下が切り捨てられます.そして次の行の「a * b == n」によって,適切な積の等式になっているかをチェックしています.「b <= 9 &&」も不可欠で,これがないと,「2*11=22」という式を通してしまうことになります.
動作確認は,次のようにします.
(全出力.出力は省略) $ ruby kukusol9.rb
(出現回数だけ.出力は省略) $ ruby kukusol9.rb | grep :
(4回出現するもの) $ ruby kukusol9.rb | grep :4 [6:4] [8:4] [12:4] [18:4] [24:4]
(5回出現するもの.出力なし) $ ruby kukusol9.rb | grep :5
さて,九九の表,言い換えると被乗数・乗数の上限を取り払ってみると,積を表す式がどうなるかを見ていくことにします.すなわち,冒頭の問題の2番目の件です.
数学的な検討をまずやっておきます.以下,扱う数は非負整数に限定します.「○×△=数」の式は,「右辺の数は,○を約数に持つ」ことと対応しますので,式の数は約数の個数と一致します.正整数nが(
は互いに異なるnの素因数)で表されるとき,nの約数は
という集合で表現でき,
の取り得る範囲は0から
までの
個であって素因数ごとに独立なので,約数の個数は
となります.
2つの正整数n,mがあって,nがmの約数ならば,mの約数の個数はnのそれよりも大きくなります.したがって傾向としては,数が大きくなればなるほど,約数の個数は増えることになりますが,もちろん素数のときは2個ですし,素数を除外したとしても,単調増加とはいきません.
といったところで,具体的な「○×△」の式とその個数を,Rubyで計算させました.先ほどのコードを少し変更します.
#!/usr/bin/env ruby # -*- coding: utf-8 -*- # kukusol.rb 1.upto(81) do |n| s = 0 m = n 1.upto(m) do |a| b = n / a if b <= m && a * b == n s += 1 puts "%d x %d = %d" % [a, b, n] end end puts "[ %2d : %d ]" % [n, s] end
前のスクリプトでは「1.upto(9) do |a|」としていたところを,変数mを入れて「1.upto(m) do |a|」としました.mすなわちループの上限値は,ループより前で設定します.ここでは「m = n」と書いていますが,「m = 9」に変更すれば,先ほどの九九の範囲と一致します.
それと,出力も少し書き換えています.数nとその解のところを上記のようにすることで,「約数の個数の大きなものから出力」ができるようにしました.具体的には,次のコマンドです.
$ ruby kukusol.rb | grep : | sort -nr -k 4
この出力の先頭を見ると,冒頭の2番目の答えを知ることができます.すなわち,「○×△=数」で表される式が一番多いのは,60と72で,ともに12個です.次点は48と80の10個です.個数に着目すると,1個から9個までのそれぞれについて,式の個数(約数の個数)がそうなる数がありますが,奇数の個数になるのは,平方数ばかりです*3.
ワンライナーだと,次のようになります.
$ ruby -e '1.upto(81){|n|s=0;m=n;1.upto(m){|a|b=n/a;if b<=m&&a*b==n;s+=1;puts"%d x %d = %d"%[a,b,n];end};puts"[ %2d : %d ]"%[n,s]}'
実は九九表の問題から,まずはワンライナーで書いていたのですが,構文エラーが取れずに苦労し,きちんとスクリプトにしてから,ワンライナーにしたのでした.構文エラーの原因は,「};puts」としないといけないところを「}puts」と書いていたこと,要はセミコロンが必要だったからでした.
(最終更新日時:Sun Apr 8 19:54:55 2012ごろ)