「数値計算とコンピュータ」
センター試験分析と BASIC
愛媛県立松山西中等教育学校
１髙田

修和

はじめに
毎年、大学入試研究委員会で、大学入試センター試験ア（１）〔プログラム〕のア，ウ，エに当てンケート分析が掲載されている。それによると、「数値計はまるものを，それぞれ次のⓞ～ⓑのうちから一つ算とコンピュータ」が数学Ⅱ・数学Ｂで選択されるのは全選べ。

体の１％にも満たない。本年度、５年生が「情報Ｃ」の授ⓞGOTO 150①

GOTO 170②

GOTO 180

業で、「数値計算とコンピュータ」を学習している。Windows③

GOTO 200④

GOTO 210⑤

GOTO 230

Vista 上で快適に動く BASIC 言語として、「（仮称）十進ＢＡＳＩＣ」を活用している。フリーソフトであり、生徒⑥

PRINT R⑦

PRINT U⑧

PRINT M⑨

LET R=R+1ⓐ

LET U=U+1ⓑ

LET K=K+1が演習するには最適である。また、６年生に「数値計算とまた，

イに当てはまるものを，次のⓞ～⑤

コンピュータ」で BASIC を教える機会があり、センター試験（平成２１年度）の内容について、より詳しく分析するのうちから一つ選べ。
ⓞR-INT(R/M)*M<>0①

R-INT(R/M)*M=0

ことで、生徒が選択する幅が広がればと考え、このテーマ②

R-INT(R/P)*P<>0③

R-INT(R/P)*P=0を設定した。

④

R-INT(R/Q)*Q<>0⑤

R-INT(R/Q)*Q=0（２）〔プログラム〕を実行し，変数 P，Q，D にそれぞれ２

研究概要

3，7，15 を入力するとき，整数の列
3（１）平成２１年度センター試験

オ

7 9

カキ

12 13 14 15に続いて

ア 「数値計算とコンピュータ」試験問題（配点２０）

総数＝9「異なる 2 つの自然数 P，Q を用いて表される数」が出力される。また，変数 P，Q，D にそれぞれ 3，p，q を異なる自然数とする。このとき，与えられた７，100 を入力したとき，整数の列に続いて自然数 d について,d 以下の自然数 k のうちで総数＝ クケ

k＝mp＋nq（m，n は 0 以上の整数）･･････（*）のように表すことができるものを小さい順にすべて列挙〔プログラム〕を部分的に変更して，次のような 2 種し，最後にその個数を表示したい。そのために次のよう類のプログラムを作る。

な〔プログラム〕を作った。ここで，INT(X)は X を超えない最大の整数を表す関数である。
〔プログラム〕が出力される。

（３）式（*）のように表すことができないような d 以下の自然数 k を小さい順にすべて列挙し，最後にその個数を表示したい。そのためには，〔プログラム〕の 150行および 180 行にある

アをコに置き換えると100

INPUT PROMPT“p=”:Pともに，200 行を削除すればよい。

コに当てはま110

INPUT PROMPT“q”=:Qるものを，次のⓞ～⑤のうちから一つ選べ。

120130INPUT PROMPTLET U=0“d”=:Dⓞ

GOTO 190①GOTO 200②

GOTO 210③GOTO 220④

GOTO 230⑤

GOTO 240

140

FOR K=1 TO D

（４）自然数 k に対して，式（*）を満たす組（m，n）の150

IF K-INT(K/P)*P＝0 THEN

160

FOR M=0 TO INT(K/P)

個数を𝑣𝑘 とする。d 以下の各自然数 k について𝑣𝑘 を出力し，最後に総数の和として和𝑣1 ＋･･･＋𝑣d の値を表

170

LET R＝K-M*P示したい。そのためには，〔プログラム〕の 150 行を180IF190

NEXT M200

ウ210

PRINT K220エイTHENアア150サのように変更し，180 行のアをシに置き換えて，200 行を削除する。さらに 210 行および 220 行を
210
220

PRINTス“k=” ;K; “のとき，” ;V; ”個”

230NEXT Kに変更すればよい。

240

PRINT “総数=”; U

はまるものを，それぞれ次のⓞ～⑧のうちから一つず

サ，シ，スに当て250

ENDつ選べ。

（イ）P＝3，Q＝7，D＝100 のとき，ⓞGOTO 210①GOTO 220

②GOTO 230

③LET V=0④

LET V=U⑤

LET U=U+V⑥

LET V=V+U⑦

LET U=U+1⑧

LET V=V+1イ

解答（１）（ア）150 行では 1≦K≦D である整数 K を P で割ったときの余りが 0 であるから，つまり K＝M×Pを満たす整数 M があれば実行が移動する。このときは，条件を満たす場合であるから，その Kの値を表示する 210 行へ実行が移動すればよい。よって、ア＝④（k が p で割り切れる場合であるから，（*）の形より，k を表示すればよい。）（a）K-INT(K/P)*P＝0 は整数 K を P で割ったときの余りが 0 であることを表す。
（イ）160～190 行の FOR～NEXT のループは K が P で割り切れないとき，0≦M≦INT(K/P)である整数

1≦k＝3m＋7n≦100，m≧0，n≧0を満たす整数 m，n を調べればよい。
100m≧0 より，7n≦100 n≦ ＝14.2･･･
7

よって，n＝0，1，2，･･･，14 について，考えればよい。
ところで，m は 0 以上の整数であるから，n＝0 のとき，3m＋7n＝3mn＝1 のとき，3m＋7＝3(m＋2)＋1n＝2 のとき，3m＋14＝3(m＋4)＋2 となる。
3m は 3 の倍数であり，n＝3，4，5，･･･，14は n＝0，1，2 の 3 つのパターンのいずれかに含まれる。
したがって，n＝0，1，2 を調べればよい。
（a）n＝0 のとき，3m＋7n＝3m で，3m≦100動する。よって、イ＝⑤の値になればよいから，230 行へ実行が移動す（エ）220 行では条件を満たす K の個数をここまで用いていない変数 U でカウントする。

3m＋14≦10086m≦ ＝28.6･･･より、
30≦m≦28 28－0＋1＝29 個
よって，表示される総数は，
したがって，94＝クケ（別解）k＝3m＋7n･･･①の形で，6(m＝2，n＝0),10(m＝1，n＝1)は表せる。
また，①で m を 1 増やすと k は 3 増え，①の形で「12，13，14」が表せることと合わせる

よって，エ＝ⓐ（（*）の形で表せる k の個数 U をカウントさせればよい。）（２）（ア）P＝3，Q＝7，D＝15 のとき，と，「15，16，17」が表せる。そうすると，①の形で 12 以上の整数はすべて表せる。

1≦k＝3m＋7n≦15，m≧0，n≧0を満たす整数 m，n を調べればよい。
15m≧0 より，7n≦15 n≦ ＝2.1･･･

d＝15 のとき，①で表せる総数が 9 より，d＝100 のとき，総数＝9＋(100―15)＝94＝クケ

7

よって，n＝0，1，2 について考えればよい。
0123450／3691215171013214
表より
3 6333＋32＋29＝94 個（k は（*）の形で表せない数なので，210 行と220 行をとばす。）

n93m≦ ＝31 より、

3m＋7n＝3m＋14＝3(m＋4)＋2 で，ればよい。よって，ウ＝⑤m＝33.3･･･より、

0≦m≦31 31－0＋1＝32 個（c）n＝2 のとき，（k－mp が q で割り切れる場合であるから，（*）の形より，k を表示すればよい。）（ウ）200 行では条件を満たさないときに，次の K

33m＋7n＝3m＋7＝3(m＋2)＋1 で，3m＋7≦100

180 行では R が Q で割り切れるとき，実行が移1001≦m≦3333―1＋1＝33 個（b）n＝1 のとき，M について，R＝K-M×P が Q で割り切れるかを判定する処理を行う。

m≦（３）式(*)を満たさない自然数を列挙するためには，
150 行と 180 行で条件を満たすときは表示せずに，次の K の値になればよいから，230 行へ実行が移動すればよい。よって，コ＝④（４）式(*)を満たす組(m，n)の個数𝑣𝑘 をカウントする変数を V，和𝑣1 ＋･･･＋𝑣d を表す変数 U を用意する。

791012総数＝9と出力される。
したがって，オ＝6，カキ=10131415（ア）150 行では𝑣𝑘 を表す変数を導入するために，V を初期化するから，サ＝③（イ）180 行では（*）の形で表せる k の個数𝑣𝑘 をカウントさせるから，シ＝⑧

x，y を「負でない整数」に変えると，（ウ）220 行では𝑣𝑘 の和を U にするために，Vの値を U に加えるから，ス＝⑤
ウ〔参考〕の「ab＋１以上」は，ab＋１―a―b＝(a―1)(b―1)と変形できる。

補足
p，q を互いに素な自然数とするとき，よって，k＝mp＋nq（m，n は 0 以上の整数）(p－１)(q－１)以上の整数はすべて，ax＋by（x，y は負でない整数）の形で表すことができる。の形で，(p－１)(q－１)以上の整数がすべて表せる。
〔参考〕a，b が互いに素なとき，ab＋１以上のすべての自然数は，ax＋by（x，y は自然数）の形に表すことができる。

（２）文法
①

n≧ab＋１を満たす自然数 n に対して，（証明）

INPUT PROMPT ”(文字列)”：変数
INPUT による入力時に文字列を表示することがでn－a，n－2a，n－3a，･･･，n－baきる。

を b で割った余りはすべて異なる（証明１）ので，②上の b 個の自然数の中に，b で割り切れるものがLET

変数＝数値変数に数値を記憶させる。

ある（証明２）。それを n－xa とすると，これは③FOR

変数＝初めの値yb（y は自然数）の形で表され，n－xa＝yb処理１

よって，ax＋by＝n処理２

（証明終）

TO

最終の値

･･････（証明１）

t を b で割った余りをＲ(t)で表す。

NEXTn－a，n－2a，n－3a，･･･，n－ba を b で割った余り
Ｒ(n－a)，Ｒ(n－2a) ，･･･，Ｒ(n－ba)はすべて異なる。
（証明）

変数回数の決まったループ。
④IF

条件式

THEN

命令

条件式が成立するときは，THEN に続く命令を実行せもし同じものがあると仮定すると，異なるよ。

j，k に対して，条件式が成立しないときは，THEN に続く命令を無視

Ｒ(n－ja)＝Ｒ(n－ka)が成り立つ。
言い換えると，して次の行へ進め。
⑤(n－ja)－(n－ka)＝ka―ja＝(k―j)a がGOTO

行番号

GOTO の後に続く番号の行へプログラムを実行を移b で割り切れる。

す命令文。

a，b が互いに素であるから，a は b と共通な素因数を１つも持たない。

⑥

PRINT

数式

数式が演算の対象になり，その計算結果が表示されよって，(k―j)a が b で割り切れるには，る。

k―j が b の倍数でなければならない。
また，1≦j≦b，1≦k≦b より，―b≦―j≦―1３

今後の課題及び所感―(b―1) ≦k―j≦b―1

今回は１年分について詳しく考察をしたが、内容は数となり，これを満たす k―j が b の倍数となるのは，学的な要素も多分に含んでおり、単にプログラムを作れ

1，2，･･･，b―1 は b の倍数ではないから，るだけでは厳しいように感じられた。プログラムについk―j＝0 のとき成り立つ。よって，j＝kては流れ図を利用しながら、図式化することができれば、これは，j≠k に反する。

（証明終）内容の把握もやりやすいように思う。できるだけ問題を解くことも必要であるが、それ以上にプログラムを作成

整数を b で割った余りは，することの楽しさを知って欲しい。また、今回はフリー

0，1，･･･，b―1 の b 種類しか存在しない。

ソフトである「（仮称）十進ＢＡＳＩＣ」を紹介したが、（証明２）

したがって、b で割ったときの b 個の余り
Ｒ(n－a)，Ｒ(n－2a) ，･･･，Ｒ(n－ba)
がすべて異なるから，上の b 種類がすべて現れるしかなく，余りがワンセットそろう。
よって，Ｒ(n－a)，Ｒ(n－2a) ，･･･，Ｒ(n－ba)の中に b で割り切れるものがある。

（証明終）より高度なプログラムが作成できるソフトについても、機会があれば授業で活用していきたい。