平成 20 年度 算数・数学学習指導設計Ⅰ

ユークリッド互除法のプログラミング～数学的理解の重要性～

B班

高校数学 B『数値計算とコンピュータ』

工学部応用数理工学科
B07T8018Y 白川 勇太
B07T8033B 日野 治樹

B(0)

目次

単元設定の動機
学習指導要領上の取り扱い
教材研究
テーマ設定
単元計画
本時指導案
振り返り
参考資料

B(1)

・・・B(2)・・・B(3)・・・B(5)・・・B(9)・・・B(10)・・・B(12)・・・B(20)・・・B(21)

[1]単元設定の動機
B 班では、高校数学 B を扱うことになったのだが、もともとはベクトルや数列が好きだから面白いからという理由で数学 B を選択した。しかし、何をこの授業で取り扱うかを考えているうちに『数値計算とコンピュータ』は、班員の誰も高校では履修しておらず過去にも扱われていないので挑戦してみようと思い扱うことにした。
また、電卓では面倒な計算や手計算では簡単に出せない計算などを数値計算ではコンピ
ュータに人間が命令することでいろいろな問題を瞬時に解かすことができる。そんな魅力を生徒たちに将来、教壇に立ったときに教えられる
そのなかでユークリッドの互除法を選択した理由は、どの教科書にも、指導要領にも取り上げられており、さらにユークリッドの互除法の概念を学ぶことで多くのアルゴリズムを学ぶことができるからである。

B(2)[2]学習指導要領上の取り扱い□学習指導要領の比較□
B 班では、“ユークリッドの互除法”の学習指導要領における扱われ方の変動に注目することにする。
昭和 53 年度版
(６) 電子計算機と流れ図
ア 電子計算機の機能
イ アルゴリズムと流れ図数の計算に当たっては，必要に応じて各種の計算機を使用させて，学習の効果を高めるようにすること．

平成元年度版
数 A・数 B・数 C に分けられていて、互除法は数 B に充てられている。
数A(４) 計算とコンピュータ
ア コンピュータの操作
イ 流れ図とプログラム
ウ コンピュータによる計算
内容の(４)のイについては，プログラムの構造について理解させることに重点を置き，簡単なプログラムを取り扱う程度とする。ウについては，中学校又は「数学 I」での既修の内容に関する計算をコンピュータによって実行させる程度とする。
数B(４) 算法とコンピュータ
ア コンピュータの機能
イ いろいろな算法のプログラム
内容の(４)のイについては，ユークリッドの互除法，繰り返しによる平方根の計算などを取り扱う程度とする。
数C(３) 数値計算
ア 方程式の近似解
イ 数値積分法B(3)(ア) 区分求積法(イ) 面積の近似計算
内容の(３)のアについては，ニュートン法又は二分法を取り扱う程度とする。また，これに関連して，近似式，誤差，有効数字などに触れることは差し支えないが，実例により簡単な場合を取り扱うものとする。

平成 11 年度版
イ. いろいろなアルゴリズム(ｱ) 整数の計算
ユークリッドの互除法などを扱い、整数の計算におけるアルゴリズムについての理解を深め、コンピュータを活用して考察・処理できるようにする。
このほかに、ある自然数が素数かどうかを判定したり、10 進数を 2 進数に直したりすることなどを扱うことも考えられる。

平成 20 年度版
数A
(2) 整数の性質
整数の性質についての理解を深め，それを事象の考察に活用できるようにする。
イユークリッドの互除法
整数の除法の性質に基づいてユークリッドの互除法の仕組みを理解し，それを用いて２つの整数の最大公約数を求めること。また，二元一次不定方程式の解の意味について理解し，簡単な場合についてその整数解を求めること。

□考察□
昭和53年度の学習指導要領では、電子計算機やアルゴリズムといった語句は出ているが、ユークリッドの互除法という言葉が出てくるのは平成元年度の学習指導要領からだった。
平成元年度の学習指導要領においては、数 A・数 B・数 C に現在の数値計算とコンピュータの分野は分けられていたことがわかる。その中でも、ユークリッドの互除法は平方根などと一緒に扱われていた。
平成 11 年度の学習指導要領においては、整数の計算におけるアルゴリズムとしてユークリッドの互除法が取り扱われていた。
平成 20 年度の学習指導要領においては、ユークリッドの互除法が、整数の性質という単元でユークリッドの互除法が大きく取り扱われていることがわかる。そして、整数の除法の性質に基づいて、ユークリッドの互除法の仕組みを理解することについても重要視されていると考えられる。
この学習指導要領の比較から、ユークリッドの互除法がいくつかの内のアルゴリズムの１つとして扱われるだけではなく、整数の計算におけるアルゴリズムとして、重要視されてきていると考えられる。
また、平成 20 年度の学習指導要領にあるように、ユークリッドの互除法の仕組みを理解することは重要であると考え、数値計算とコンピュータという単元の授業を設計するにあたっても大切な視点としようと考えた。
B(4)[3]教材研究ユークリッドの互除法はどの教科書でも最大公約数を求めるプログラムを習う際、題材とされている。それは、ユークリッドの互除法に習うべき重要な意味があるのではないかと感じた。そして、各教科書でユークリッドの互除法の考え方の説明方法、プログラムにも違いがみられた。
そして、ユークリッドの互除法の重要性を探るべく啓林館、東京書籍、数研出版の 3 社の教科書を比較する。
□啓林館□
前提として a が b の倍数ならば a, b = b ― (※)
a > 𝑏のとき a, b = a − b, b ― (※※) と書くとする。
a > bである自然数 a,b について a,b の最大公約数を求めてみよう。
A を b で割ったときの商を q、余りを r とするとa = bq + r , b > 𝑟 ≥ 0(※※)を繰り返し用いると、
a, b = bq + r, b = bq + r − b, b = b q − 1 + r, b = b q − 1 + r − b, b= b q − 2 + r, b・・・
= r, b = b, r ・・・①①の結果を繰り返し使うと、次のようになる。
b を r で割ったときの余りをr1 とすると
b, r = r, r1r をr1 で割ったときの余りをr2 とすると
r, r1 = r1 , r2r1 をr2 で割ったときの余りをr3 とすると
r1 , r2 = r2 , r3・・・
このときb > 𝑟 > r1 > r2 > r3 > ⋯のように小さくなり、余りは 0 以上の整数だから、rn−1 をrn で割ったときの余りが 0 となるn がある。このとき、rn−1 はrn の倍数で、(※)よりa, b = b, r = r, r1 = r1 , r2 = ⋯ = rn−1 , rn = rnとなり、2 つの自然数 a,b の最大公約数を求めることができる。
このアルゴリズムをユークリッドの互除法という。
①a を b で割ったときの商を q、余りを r とする。
②r > 0ならば、①を改めて b の値を a、r の値を b とおいて①の操作を行う。
r=0 ならば③へ③このときの b が求める最大公約数である。
◆プログラム◆100 INPUT PROMPT "a,b=":A,B

160 LET B=R

110 PRINT"(";A;",";B;")"

170 PRINT"=(";A;",";B;")"

120 LET Q=INT(A/B)

180 GOTO 120

130 LET R=A-B*Q

190 LET D=B

140 IF R=0 THEN 190

200 PRINT"=";D150 LET A=B

210 END
B(5)実行結果(a=288,b=123)
a,b=288,123( 288 , 123 )=( 123 , 42 )=( 42 , 39 )=( 39 , 3 )= 3□東京書籍□
2 本のテープ A、B があるとする。A の方が B より長いとき、B を基準に用いて A の長さを次のように測る。
A
B

B

B

B

R

上の図では、B を 4 回用いて A を測った結果、余りが出たのでこれを R としている。次に、B に対して R を基準に用いて測る。このとき、余りが出ればこれを R1 とおく。
B
RR1

さらに、R に対して R1 を基準に用いて測る。この操作を割り切れるまでくり返す。ついに割り切れるとき用いた基準 D の長さが A の長さと B の長さの最大公約数になる。
このような最大公約数の計算法を互除法という。
◆プログラム◆100 !DはAとBの最大公約数

180

PRINT"最大公約数は";D110 INPUT PROMPT "A=":A190

GOTO 240

120 INPUT PROMPT "B=":B

200 END IF

130 LET X=A

210 LET X=Y

140 LET Y=B

220 LET Y=R

150 LET R=X-Y*INT(X/Y)

230 GOTO 150

160 IF R=0 THEN

240 END170

LET D=Y

実行結果(A=117,B=33)
A=117
B=33最大公約数は 3B(6)□数研出版□
2 つの整数 91 と 77 の最大公約数は、それらの素因数分解が91 = 7 × 13 ,77 = 7 × 11であることから、7 である。しかし、素因数がすべて大きい数のときは、素因数分解は容易ではない。そこで、素因数分解をしないで最大公約数を求める方法を考えてみよう。
自然数 A、B に対して、A を B で割った商を Q、余りを R とすると
A=B×Q+R ⋯①であるから、移項して
R = A − B × Q ⋯ ② となる。
②より A と B の公約数は、R の約数である。すなわち A と B の公約数は、B と R の公約数でもある。
逆に、①より B と R の公約数は、A と B の公約数である。
したがって、次のことが成り立つ。
A と B の最大公約数は、B と R の最大公約数に等しい。
例えば、91 と 77 については、91 = 77 × 1 + 14であるから(91 と 77 の最大公約数)＝(77 と 14 の最大公約数)
77 = 14 × 5 + 7であるから(77 と 14 の最大公約数)＝(14 と 7 の最大公約数)
14 = 7 × 2 + 0であり、余りが 0 になったので(14 と 7 の最大公約数)＝7
よって、91 と 77 の最大公約数は 7 である。
このような最大公約数の求め方をユークリッドの互除法という。
自然数 A、B の最大公約数を、ユークリッドの互除法によって求める手順は、次のようになる。
[1]A を B で割ったときの余り R を求める。
[2]余り R が 0 でないならば、[3]に進み、R が 0 ならば[4]に移る。
[3]B、R の値を、それぞれ、改めて A、B とし[1]に戻る。
[4]B は最大公約数であり、これで処理を終わる。
ユークリッドの互除法のような、問題の答えを求めるためのあいまいさのないはっきりした手順のことをアルゴリズムという。
ユークリッドを流れ図に表わすと、下のようになる。
始め

A、B を入力

R←A÷B の余り
R=0R≠0A←B
B←R

B を表示

終わり
B(7)

◆プログラム◆
100 INPUT PROMPT"A,B=":A,B
110 LET R=A-INT(A/B)*B
120 IF R<>0 THEN
130

LET A=B140

LET B=R

150

GOTO 110160 END IF
170 PRINT B
180 END
実行結果
A,B=91,777□3 社の教科書を比較してみて□
ユークリッドの互除法の説明にしてもプログラムにしても違いが顕著に見られた。
まず、啓林館では、ユークリッドの互除法を説明するために a と b の関係を他社にはない独自の定義をし、それを利用することでユークリッドの互除法の考え方を説明している。
ここで注目したいのが、啓林館のプログラムの実行結果である。他社のプログラムでは、初期値と解(最大公約数)しか実行結果に表示させないようになっているが、啓林館のプログラムは、独自の定義に従ってコンピュータが計算した過程まで表示するように命令している。この利点として、おそらく生徒はコンピュータがこのプログラムで何をしたのか、何を命令したのかが後でわかりやすいということであろう。しかし、欠点として、計算過程が長くなれば実行結果も長くなってしまう。
次に、数研出版では、割り算の公式から説明。東京書籍では、図を用いて説明しているがわかりにくい。また、この 2 社のプログラムは非常に似ている。明らかに東京書籍のプログラムは数研出版のプログラムよりも長い。その大きな原因として、東京書籍は一度 Aと B を他の文字 X と Y に置き換えるという操作を行っている。それに対して、数研出版はそのまま A と B を用い、さらに A と B を同時に入力するように命令しているからである。
結果として、ユークリッドの互除法の重要性は、繰り返し文、条件文を習う題材として最も適しているのではないかと考えた。
実際に私たちが授業を設計するにあたって、数研出版では尐し触れているが、既習事項として最大公約数を求める方法として素因数分解がある。それを用いてユークリッドの互除法は説明できないかと考え、私たちは教材研究に取り組んだ。
また、ここ数十年で構造化プログラミングが広まって、BASIC で GOTO 文や行番号を使うことは古い考え方となってきている。その中で BASIC も構造化され構造化 BASIC として FULL BASIC が規格化され、教科書で扱われている。構造化 BASIC である FULL BASICを使いつつも、GOTO 文を習うことに矛盾を感じ、今回 GOTO 文を用いない、DO~LOOP文を教えようと考えた。
※GOTO 文を使うとき必ず行番号の設定が必要となる。
B(8)[4]テーマ設定
以上のような教科書、指導要領の考察から授業設計をするにあたって重視したい点はその 1．既習の素因数分解とユークリッド互除法の結びつけ
その 2．ユークリッド互除法の数学的理解
その 3．数学からプログラミングへの転換という点があげられた。
これを踏まえて B 班のテーマはユークリッド互除法のプログラミング～数学的理解の重要性～

B(9)[5]単元計画
時 学習内

本時の目標

中心となる考えオ リ エプログラム言“PRINT” を 用 い

ン テ ー語についてのてさまざまなション基礎知識をつ

式、文の実行。

問題

容1

1 + 2 × 3 + 4 ÷ 5を計算せよ。また、自分の名前を計算結果の下に出力せよ。

け、簡単な計算ができる。

2

いろい

正の平方根とろな式累乗を計算さの計算せるプログラ

SQR、^の理解

X

Nの値を計算するプログラムをつくれ。

また53 の値を求めよ。

ムをつくることができる。

3

有限の有限のくりかFOR~STEP~N

問 題 1. X = 1 + 2 + 3 + ⋯ + N 、 Y = 12 +くりかえしを用いてEXT 構 文 ,DIM

22 + 32 + ⋯ + N 2 を求めるプログラムをつえし数列などさまの理解

くり、N=5 のときの X+Y、 X + Yの値を求

配列ざまな計算をめよ。

させるプログ問題 2. 2009 人以下の人の点数の平均を求ラムをつくるめるプログラムを配列変数を用いてつくことができれ。さらに、適当に人数、点数を各自決める。て実行せよ。

また、配列変数を用いて集計結果などを計算させるプ
ログラムをつくることができる。

4無限の

4.最大公約数

既習の素因数分

5くりかを求める式・解での操作を図えしユークリッで表現し、図を条件文ド互除法の図変形していくこ

問題 2. 2 つの自然数 A と B の最大公約数を形的意味を理とでユークリッ

ユークリッドの互除法を用いて求解しプログラド互除法を導めるプログラムをつくれ。(A>B)

ミングを学ぶく。

問題 1. 2 つの自然数 A と B の最大公約数を求めよ。(A>B)

意義を探る。

それを用いてプログラムをつく

5. ユークリり無限のくりかッド互除法のえし文、条件文プログラミンを理解する。

グを基に、くりかえし文(DO ループ)、条件文(IFTHEN ENDIF)を学ぶ。

62 次方程式ax 2 + bx + c = 0の解を求めるプ

2 次方程

条件文をより式の近高度に用いログラムを求めよ。ただし、実数解をもた似解て、さまざまない場合にもそのことがわかるようなプロな 2 次方程式

グラムにせよ。の近似解を求

また、x 2 − 30x + 225 = 0 , x 2 − 14x + 50 = 0

めることがでの解を求めよ。

条件文の多様きる。

7

二分法

解の公式を用関数の定義 DEF

関数 y=x 3 のグラフに対して、閉区間[0,1]で台形公いないで二分F(X)をし、既習の面積を台形公式を用いて求めるプログラ

式法を用いて 2の事項をすべてムをつくり、きざみ幅を 1000 として実行せ次方程式の近用いることがでよ。

似解を求めるきる。

ことができる。
台形公式のプログラムをつくることができさまざまな関数、区間の面積を近似し求めることができる。

8演習
B(11)

[6]本時の指導案□単元名□

数値計算とコンピュータ□単元の目標□簡単な数値計算のアルゴリズムを理解し、それを科学技術計算用のプログラミング言語(BASIC)を利用して表現し、具体的な事象の考察に活用できる。
□.≪1 時≫の学習について□(1)目標
1 時；最大公約数を求める式・ユークリッド互除法の図形的意味を理解しプログラミングを学ぶ意義を探る。
(2)期待される数学的活動
A：2 つの自然数 A と B にそれぞれ適当に具体的な数値を代入して因数分解で最大公約数を求めることができる。
B：素因数分解で行った操作を A×B の長方形を用いて図で最大公約数を求めることができる。
C：活動 B で行った操作から最大公約数を求める方程式を導き、その方程式がもつ意味を理解できる。

(3)本時の展開[問題場面の提示]
問題 1. 2 つの自然数 A と B の最大公約数を求めよ。(A>B)
支援：実際に A と B に数を代入してみて最大公約数を求めてみよう。
自力解決 A：2 つの自然数 A と B にそれぞれ適当に具体的な数値を代入して因数分解で最大公約数を求めることができる。

図 1.1
支援：その素因数分解から何がわかったかな？
素因数分解でやったことを 168×60 の長方形を用いて図に書き表してみたら何かわかるかも。
B(12)自力解決 B：素因数分解で行った操作を A×B の長方形を用いて図で最大公約数を求めることができる。

51416860

51414×125×12

図 1.212

図 1.312×141212×5

図 1.4
図 1.2：素因数分解(図 1.1)での操作を図式化する。
図 1.3：168 は 14×12、60 は 5×12 と表せる。
図 1.4：また 168 は 12×14、60 は 12×5 とも表せる。

支援：12×14 を 12×5 を用いて表すとどんな図が書ける？

自力解決 C：活動 B で行った操作から最大公約数を求める方程式を導き、その方程式がもつ意味を理解できる。
12 × 5 + 12 × 5 + 12 × 4
12×5

図 1.5

B(13)

支援：縦にも横にも 12×5 が入ってるね。
この長方形の中にどんな大きさの正方形があるかな？
図 1.5 に注目する。
横(168)と縦(60)の共通性をはかるために横を 12 × 5 + 12 × 5 + 12 × 4
縦を(12×5)と展開する。
168 を(12×5)すなわち 60 で割ると 2 あまり 12 × 4
60 を(12×5)すなわち 60 で割ると 1それを図式化すると図 1.5 のようになり 60×48 の長方形が余る
次に、60 を 12 × 4 + 12、48 を 12 × 4 と展開する。
60 を 12 × 4 すなわち 48 で割ると 1 あまり 1248 を 12 × 4 すなわち 48 で割ると 1
それを図式化すると図 1.5 のようになり 48×12 の長方形が余る
次に、48 を 12 × 1 + 12 × 1 + 12 × 1 + 12 × 1 、12 を 12 × 1 と展開する。
48 を 12 × 1 すなわち 12 で割ると 412 を 12 × 1 すなわち 12 で割ると 1
それを図式化すると図 1.5 のように 12×12 の正方形が 4 つで余りなし
すなわち図 1.5 からも 12×12 の正方形が 168×60 の長方形を余りなく敷き詰め、12 が 168 と 60 の最大公約数となることがわかる。

支援：自分で勝手に決めた数をもとの A と B に戻して文章を文字式化してみよう。
次に、168 と 60 を A と B に置き換えてみる。
168 を 60 で割ると 2 あまり 48A
B
商C
A=B×商+C
60 を 48 で割ると 1 あまり 12B
C
商
D
B= C×商+D
48 を 12 で割ると 4 ( あまり 0 )CD商
E
C=D×商+E

(ア)

(イ)

(ウ)

(ア)、(イ)、(ウ)から
A を B に、B を C に置き換え
B を C に、C を D に置き換え
C を D に、D を E に置き換えるという作業の繰り返しということが読み取れる。
さらに、この場合、E は 0 となる。
つまり、あまりが 0 となれば式の繰り返しは終了し、求めるべき最大公約数 D が求まる。

B(14)□≪2 時≫の学習について□(1)目標
2 時；ユークリッド互除法のプログラミングを基に、繰り返し文(DO ループ)、条件文(IF THEN END IF)を学ぶ。
(2)期待される数学的活動
A：1 時で導いた方程式から最大公約数を求めるにあたり、何が必要か、どのような条件を与えればいいかを記述することができる。
B：活動 A で記述した条件等を実際にプログラミングし筋が通っているプログラムを作ることができる。
C：活動 B で作ったプログラムをエラーが出ないプログラムに書き換えることができる。
D：変数を定義することができる。
E：条件を満たせばくりかえしを中断するという指令 EXIT FOR を扱うことができる。
F：無限回のくりかえし構文 DO ループを理解し扱うことができる。

(3)本時の展開[問題場面の提示]
問題 2. 2 つの自然数 A と B の最大公約数をユークリッドの互除法を用いて求めるプログラ
ムをつくれ。(A>B)
自力解決 A：1 時で導いた方程式から最大公約数を求めるにあたり、何が必要か、どのような条件を与えればいいかを記述することができる。

INPUT PROMPT “A=”:A
INPUT PROMPT “B=”:BFOR N= ???
LET Q=A/Bの整数部分
LET R=A-B*Q
条件 R=0 のとき
PRINT “最大公約数”;BNEXT N
END
支援：条件文は【意味】<条件>が成立するとき,<命令１>を行って<命令２>に移る<条件>が成立しないとき,<命令２>に移る

IF<条件> THEN<命令１>
END IF
<命令２>
B15)

【意味】

INT(X)

正の数 X を超えない最大の整数を与える構文と書くことを教える。

自力解決 B：活動 A で記述した条件等を実際にプログラミングし筋が通っているプログラムを作ることができる。

INPUT PROMPT “A=”:A
INPUT PROMPT “B=”:B
FOR N= ???
LET Q=INT(A/B)
LET R=A-B*Q
IF R=0 THEN
PRINT “最大公約数”;B
END IF
NEXT N
END
支援：N は繰り返し回数なので、1～大きい数
自力解決 C：活動 B で作ったプログラムをエラーが出ないプログラムに書き換えることができる。

INPUT PROMPT “A=”:A
INPUT PROMPT “B=”:B
FOR N=1 TO 100000
LET Q=INT(A/B)
LET R=A-B*Q
IF R=0 THEN
PRINT “最大公約数”;B
END IF
NEXT N
END
B(16)支援：実行すると結果がでないのはなぜかな？
A と B は定数じゃなくて変数じゃなきゃいけないよね？

自力解決 D：変数を定義することができる。

INPUT PROMPT “A=”:A
INPUT PROMPT “B=”:B
LET X=ALET Y=B
FOR N=1 TO 100000
LET Q=INT(X/Y)
LET R=X-Y*Q
IF R=0 THEN
PRINT “最大公約数”;Y
END IFLET X=YLET Y=R
NEXT N
END
支援：実行するとエラーがでる。なぜかな？
それは、最大公約数が求まってなお繰り返すために、0/0 になってしまうため。
そのとき使える構文が、最大公約数を求めたあと、FOR~NEXT 文から抜け出す
EXIT FOR【意味】FOR NEXT 構文から抜け出す。

B(17)自力解決 E：条件を満たせばくりかえしを中断するという指令 EXIT FOR を扱うことができる。

INPUT PROMPT “A=”:A
INPUT PROMPT “B=”:B
LET X=ALET Y=B
FOR N=1 TO 1000
LET Q=INT(X/Y)
LET R=X-Y*Q
IF R=0 THEN
PRINT “最大公約数”;Y
EXIT FOR
END IFLET X=YLET Y=R
NEXT N
END
支援：FOR NEXT 文は有限回の繰り返ししかできないので、基本的に範囲が定まっているときに用いる。
たしかに、ユークリッドの互除法では、入力する数字によって繰り返しの回数が異なる。
DO~EXIT DO~LOOP【意味】無限の繰り返し（無限ループ）

FOR NEXT との対応
FOR N=1 TO 1000

⇔DO

EXIT FOR⇔

EXIT DO

NEXT N⇔LOOPB(18)自力解決 F：無限回のくりかえし構文 DO ループを理解し扱うことができる。

INPUT PROMPT "A=":A
INPUT PROMPT "B=":B
LET X=ALET Y=BDO
LET Q=INT(X/Y)
LET R=X-Y*Q
IF R=0 THEN
PRINT "最大公約数は";Y
EXIT DO
END IFLET X=YLET Y=R
LOOPEND
自力解決 A では、問題 1 を解くにあたって行った作業をプログラム化することである。
プログラムを完成させるにはどんな条件や、どんな文字が必要かなどを書き出し、プログラミングしてみる。
しかし、生徒はまだ条件文を言葉では書けてもプログラム上での記述方法を知らない。
そこで支援として条件文を与え、実際に各自、自力解決 B として条件文を書き加える。
次に、自力解決 C もしくは D に。自力解決 C では、有限のくりかえしのくりかし回数を決める作業である。感がいい生徒は気付くであろうが、ユークリッド互除法のくりかえしは有限回ではなく無限回のくりかえしである。条件を満たすまで無限にくりかえさなければならない。自力解決 D では変数の定義。そのまま与えられた A と B を用いて A と B をそれぞれ置き換える、すなわち A を B に、B を R にというように置き換えても問題はない。
むしろ、その方がプログラムもシンプルになる。しかしこの場合、新しく変数として定義した方が生徒が混乱しないのではないかと考えこのようなプログラムを考えた。
ここまでいけば、ほぼプログラムは完成したと言える。しかし、自力解決 E で示すように自力解決 D の段階ではエラーとなる。ユークリッド互除法は、余り R が 0 になるまで無限にくりかえすが、余りが 0 になればその時点で最大公約数は求まる。すなわち、自力解決 Dの段階では最大公約数が求まってもなおくりかえし続けているということだ。式で考えると R＝0 なので Q=X/Y となるが、R=0 から X=Y=0 すなわち Q=0/0(不定形)となってしまう。
だから、ここで条件を満たせばくりかえしから抜け出すという命令文を習う。
最後に、自力解決 C の段階で疑問をもっていた無限のくりかえし文を学び、プログラムを書き換えればプログラムは完成である。
実際に問題 1 を解くにあたって考えた数値を A と B にそれぞれ代入し素因数分解と値が一致するか確かめてほしい。
B(19)[7]振り返り□自己評価(授業の感想)□
この授業を通じて学んだことは、まずはグループワークの難しさ。複数人なので当然予定を合わせることも難しい。誰かが休めば、その分誰かに負荷がかかる。後に自分自身が教師になったとき、職場でも同様に、人間関係は大切になってくるだろう。その中で、うまくやれるよう、さらに協調性を養っていかなければならないと感じた。
そして何よりも、生徒の目線で授業を作る大変さを知った。自分は理解していても生徒は理解できているとも限らないし、より一層の理解がないと生徒に指導することができな
い。そもそも自分自身が履修していない範囲だったので、正直漠然としていた。しかしそれと同時に、履修していない範囲だからこそ生徒と同じ立場であったとも言える。
今回の授業設計では、生徒の数学的活動・教師の支援の考える難しさを知ることができ、おまけに BASIC まで使えるようになった。など、いろいろ理解を深めることができた。そして、プログラミングする前に数学的に理解させる重要性に気づけたことが良かったとこ
ろだと感じている。
授業を設計する上で、生徒に数学をどう教えるかと試行錯誤することは大変であり、楽しい作業でもあったと思う。今回学んだことを今後の授業の設計に役立てていきたいと思う。
【白川 勇太】
最初は、何をしたらいいのかがいまいちわからなかった。そもそも最終的になにをやるのか、どういった発表を行うのかなど疑問を常に持ちながら授業設計に取り組んできた。いいものをつくろうとこの授業にはかなり時間を費やしてきましたが、工学部の授業との両立が非常に難しかった。また、私の班は 2 人で授業設計していたので役割分担が非常に大切だった。1 人ではなかなか思いつかないことも 2 人で考えれば思いつくことも多くあり協調性の大切さを学んだ。
また、生徒の立場に立って活動を考えたり、問題をつくったりと自分では分かっているつもりでも生徒は知らない、わからない、生徒の立場で物事を考えるのって難しいことだと学んだ。
私たちは、数学 B の数値計算とコンピュータをこの授業設計で扱ったが、高校の頃は履修しておらず自分たちも理解していないまま取りかかった。だから、わからないことも多くあり大変だったが楽しく学べたと思う。
また、毎回レジュメをつくり前で発表する際、緊張のあまり言いたいことや考えてきたことが上手く伝えられずかなり苦悩した。これからもこの授業設計を通して学んだことを教育実習などに活かしていきたい。
【日野 治樹】□今後の課題□・単元計画で各時の問題は作成したが、生徒の数学的活動までは書けなかった。
・ユークリッドの互除法の導出方法があまり納得のいくものにならなかった。もっとわかりやすい説明方法はなかったのかなど疑問が残る。
・教材研究においてももっと多くの出版社の教科書を比較・研究して授業設計に取り組みたかった。

B(20)【8】参考資料
□教科書□
啓林館
東京書籍
数研出版
実教出版
□参考文献□
算数・数学学習指導論 鳥取大学数学教育学研究室 溝口達也
平成 11 年度版 高等学校学習指導要領解説 数学編 理数編 文部科学省
共立出版株式会社 ユークリッド原論 中村幸四郎 著・翻訳 他□参考資料□
過去の学習指導要領（http://www.nicer.go.jp/guideline/old/）【閲覧日 平成２１年 ２月２７日～３月１日の間】
文部科学省
高等学校学習指導要領案(http://www.mext.go.jp/a_menu/shotou/new-cs/081223.htm)【閲覧日 平成２１年 ２月２７日】

B(21)