ユークリッドの互除法の原理 :
全体集合を自然数とする。
A を B で割った余りを R とする。
A と B の最大公約数は、 B と R の最大公約数に等しい。
全体集合を自然数とする。
A を B で割った余りを R とする。
A と B の最大公約数は、 B と R の最大公約数に等しい。
( 証 明 )
-
A を B ( A > B ) で割った余りを R とすると、
A = W×B + R ( B > R ) ・ ・ ・ @
A と B の最大公約数を G とすると、
A = G×a B = G×b ( a と b は互いに素 ) ・ ・ ・ A
A を @ に代入すると、 G( a−Wb ) = R
r = a−Wb と置くと、 R = G×r
したがって、 G は B と R の約数である。
B と R の最大公約数を Gmax とすると、
G ≦ Gmax ・ ・ ・ B
B = Gmax×p R = Gmax×q ( p と q は互いに素 ) ・ ・ ・ C
C を @ に代入すると、 A = Gmax( Wp+q )
s = Wp+q と置くと、 A = Gmax×s
したがって、 Gmax は B と A の約数である。
したがって、
Gmax ≦ G ・ ・ ・ D
B と D より、 Gmax = G
したがって、 B と R の最大公約数は Gmax である。
( 証明終わり )
※ 参考 : プログラミング > 最小公倍数のプログラムの作り方
十進BASIC > 十進BASIC_プログラミング > ユークリッドの互除法のプログラム
問題 1 :
-
a と b が互いに素ならば、 7a + 16b と 3a + 7b も互いに素であることを証明せよ。
-
7a + 16b と 3a + 7b の最大公約数が 1 であることを証明すればいい。
7a + 16b = 2 (3a+7b) + (a+2b) なので、
7a + 16b と 3a + 7b の最大公約数は、 3a + 7b と a + 2b の最大公約数に等しい。
3a + 7b = 3 (a+2b) + b なので、
3a + 7b と a + 2b の最大公約数は、 a + 2b と b の最大公約数に等しい。
a + 2b = 2b + a なので、
a + 2b と b の最大公約数は、 b と a の最大公約数に等しい。
a と b が互いに素のとき、 a と b の最大公約数は 1 である。
よって、 7a+16b と 3a+7b の最大公約数は 1 である。
-
10 n + 2 と 11 n + 3 の最大公約数が 8 になる、 50以下の自然数 n を求めなさい。( 6個あります )
-
ユークリッドの互除法 :
( 11 n + 3 ) − ( 10 n + 2 ) =→ n + 1
( 10 n + 2 ) − ( n + 1 ) × 10 =→ −8
よって、 10 n + 2 と 11 n + 3 の最大公約数は ( n + 1 ) と 8 の
最大公約数に等しい。
( n + 1 ) と 8 の最大公約数が 8 になるためには、
2 ≦ n + 1 ≦ 51 の範囲で、 n + 1 = 8 or 16 or 24 or 32 or 40 or 48
を n が満たすことである。 したがって、 答えは次の6個になる。
7, 15, 23, 31, 39, 47
-
15721 と 12877 の最大公約数を求めよ。
-
15721 − 12877 × 1 = 2844
15721 と 12877 の最大公約数は 12877 と 2844 の最大公約数に等しい。
12877 − 2844 × 4 = 1501
12877 と 2844 の最大公約数は 2844 と 1501 の最大公約数に等しい。
2844 − 1501 × 1 = 1343
12877 と 2844 の最大公約数は 1501 と 1343 の最大公約数に等しい。
1501 − 1343 × 1 = 158
1501 と 1343 の最大公約数は 1343 と 158 の最大公約数に等しい。
1343 − 158 × 8 = 79
1343 と 158 の最大公約数は 158 と 79 の最大公約数に等しい。
158 − 79 × 2 = 0
158 と 79 の最大公約は 79 である。
したがって、 答えは 79 である。
つまり、
MOD(15721,12877) = 2844 * a/b = INT(a,b) + MOD(a,b)
MOD(12877,2844) = 1501
MOD(2844,1501) = 1343
MOD(1501,1343) = 158
MOD(1343,158) = 79
MOD(158,79) = 0
参考:
十進BASIC > 十進BASIC_プログラミング > ユークリッドの互除法のプログラム
数理論 へ戻る