2014年12月21日
今年もあとわずか
今年もあと 10 日ほどとなりました。
年末になると大掃除と同時に不要品の整理なんかをします。いつも思いますが、普段からやっておけば慌てる必要もないんですよね。しかし、なぜかそれができない。そろそろ、なんとかしなければ。PCのバックアップもこの頃に行います。これも普段からしておけばいいんですけど、それをしないのでもしものときに慌てふためく事になるわけです。で、RAID付きの外付けディスクでも買おうかと悩んでいます。結構高いんですよね。
今年最後になるかもしれない数学の問題へのチャレンジです。結構前から悩んでいた問題で、ようやく一つの解き方を見つけたといった感じです。しかし、解き方は完全ではないし、他にもっとエレガントな解き方があるのではないかと思います。出題は「数学問題bot」からです。
-----
■ √2 + √3 + √5 + √7 が無理数であることを証明せよ (近畿大学第12回数学コンテスト)
まず、q を有理数として √2+√3+√5+√7 = q が成り立つとします。この両辺の二乗を計算します。
( √2+√3+√5+√7 )2
= 2 + 3 + 5 + 7 + 2_2:3 + 2_2:5 + 2_2:7 + 2_3:5 + 2_3:7 + 2_5:7
= 17 + 2_2:3 + 2_2:5 + 2_2:7 + 2_3:5 + 2_3:7 + 2_5:7 = q2 より
2:3 + 2:5 + 2:7 + 3:5 + 3:7 + 5:7 = q2 / 2 - 17 / 2
となります。但し、2_2:3 = 2√2√3 を表しています。このとき、右辺はやはり有理数となります。これをもう一度二乗します。
( 2:3 + 2:5 + 2:7 + 3:5 + 3:7 + 5:7 )2
= 6 + 10 + 14 + 15 + 21 + 35 + 24_2:3 + 20_2:5 + 16_2:7 + 18_3:5 + 14_3:7 + 10_5:7 + 6_2:3:5:7
= ( q2 / 2 - 17 / 2 )2 より
24_2:3 + 20_2:5 + 16_2:7 + 18_3:5 + 14_3:7 + 10_5:7 + 6_2:3:5:7 = ( q2 / 2 - 17 / 2 )2 - 101
となります。ここでも右辺はやはり有理数です。これを繰り返すと、左辺は常に 2:3, 2:5, 2:7, 3:5, 3:7, 5:7, 2:3:5:7 の線形結合で表され、右辺は常に有理数です。
左辺が ( K1_2:3 + K2_2:5 + K3_2:7 + K4_3:5 + K5_3:7 + K6_5:7 + K7_2:3:5:7 )2 のとき、これを展開すると
( 6K12 + 10K22 + 14K32 + 15K42 + 21K52 + 35K62 + 210K72 ) +
( 10K2K4 + 14K3K5 + 70K6K7 )_2:3 + ( 6K1K4 + 14K3K6 + 42K5K7 )_2:5 +
( 6K1K5 + 10K2K6 + 30K4K7 )_2:7 + ( 4K1K2 + 28K3K7 + 14K5K6 )_3:5 +
( 4K1K3 + 20K2K7 + 10K4K6 )_3:7 + ( 12K1K7 + 4K2K3 + 6K4K5 )_5:7 +
( 2K1K6 + 2K2K5 + 2K3K4 )_2:3:5:7
となるので、( K1, K2, K3, K4, K5, K6, K7 ) = ( 1, 1, 1, 1, 1, 1, 0 ) を初期値として二乗したときの式を無限に作成することができます。その中の 7 つの式を使って連立方程式を計算すれば、2:3 から 2:3:5:7 までの値を求めることができます。ところが、右辺は有理数なので、その解はやはり有理数になります。これは、2:3 から 2:3:5:7 までの値が全て有理数であることを意味します。しかし、これらは無理数であるため、最初の仮定に矛盾します。従って、√2+√3+√5+√7 は無理数です。
次に、この連立方程式が解を持つことを示さなければなりません。が、これは証明することができなかったので、実際に数値計算をしてみることにしました。まず、連立方程式の係数を求めるプログラムを作成します。
template<class T> void calcK( const std::vector<T>& k, std::vector<T>* res )
{
if ( k.size() != 8 ) return;
res->resize( k.size() );
(*res)[0] = 6 * k[1] * k[1] + 10 * k[2] * k[2] + 14 * k[3] * k[3] +
15 * k[4] * k[4] + 21 * k[5] * k[5] + 35 * k[6] * k[6] +
210 * k[7] * k[7];
(*res)[1] = 10 * k[2] * k[4] + 14 * k[3] * k[5] + 70 * k[6] * k[7];
(*res)[2] = 6 * k[1] * k[4] + 14 * k[3] * k[6] + 42 * k[5] * k[7];
(*res)[3] = 6 * k[1] * k[5] + 10 * k[2] * k[6] + 30 * k[4] * k[7];
(*res)[4] = 4 * k[1] * k[2] + 28 * k[3] * k[7] + 14 * k[5] * k[6];
(*res)[5] = 4 * k[1] * k[3] + 20 * k[2] * k[7] + 10 * k[4] * k[6];
(*res)[6] = 12 * k[1] * k[7] + 4 * k[2] * k[3] + 6 * k[4] * k[5];
(*res)[7] = 2 * k[1] * k[6] + 2 * k[2] * k[5] + 2 * k[3] * k[4];
}
int main( int argc, char* argv[] )
{
std::vector<double> k( 8, 1 );
k[0] = 8.5;
k[7] = 0;
std::vector<double> res;
for ( unsigned int i = 0 ; i < 7 ; ++i ) {
for ( std::vector<double>::const_iterator cit = k.begin() ;
cit != k.end() ; ++cit )
printf( "%f ", *cit );
std::cout << std::endl;
calcK( k, &res );
k = res;
}
}
初期値を 定数項 17 / 2、2:3:5:7 の係数をゼロ、その他を全て 1 として、( √2+√3+√5+√7 )2 をスタートとして最初の 7 つの方程式を求めます。すると、定数項を含めた係数行列は次のようになります。
( 定数項, K1, K2, K3, K4, K5, K6, K7 ) =
( 8.50000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 0.00000E+00 )
( 1.01000E+02, 2.40000E+01, 2.00000E+01, 1.60000E+01, 1.80000E+01, 1.40000E+01, 1.00000E+01, 6.00000E+00 )
( 3.10760E+04, 1.09360E+04, 8.36000E+03, 7.25600E+03, 6.56800E+03, 5.73600E+03, 4.52000E+03, 1.61600E+03 )
( 4.75505E+09, 1.64307E+09, 1.27944E+09, 1.07266E+09, 1.05699E+09, 8.84475E+08, 6.80756E+08, 2.90082E+08 )
( 1.15754E+20, 4.06293E+19, 3.14194E+19, 2.66279E+19, 2.55509E+19, 2.16682E+19, 1.68184E+19, 6.76792E+18 )
( 6.88744E+40, 2.40734E+40, 1.86577E+40, 1.57542E+40, 1.52542E+40, 1.28776E+40, 9.96809E+39, 4.08898E+39 )
( 2.43947E+82, 8.53950E+81, 6.61344E+81, 5.59108E+81, 5.39745E+81, 4.56340E+81, 3.53560E+81, 1.44110E+81 )
定数項は右辺に移行すると、係数行列は 7 行 7 列の正方行列になります。Excel 等でこの行列式を計算すると、-7.97570E+135 という値になります。つまり、係数行列は非特異なので、この連立方程式は解くことができることになります。ちなみに、√2+√3+√5+√7 = 8.02808 を使って右辺の値を求めると
( 2.37251E+01, 4.61879E+02, 1.82256E+05, 2.84622E+10, 6.94340E+20, 4.13234E+41, 1.46368E+83 )
となり、係数行列の逆行列は
( -3.46178E-01, 8.39753E+00, -4.03202E+00, -6.10160E-04, 2.46200E-13, 1.08539E-33, -4.10863E-75 )
( -1.03701E+00, -3.55841E+01, 1.34416E+01, 2.11717E-03, -8.41981E-13, -3.72926E-33, 1.40945E-74 )
( 1.27076E-03, 1.74473E+01, -2.33385E+00, -5.04553E-04, 1.80766E-13, 8.28950E-34, -3.09690E-75 )
( -1.00712E-01, 1.20718E+01, 4.56727E-01, -5.46006E-05, 1.35736E-15, 3.40899E-35, -9.26729E-77 )
( 1.91843E+00, 4.77461E-01, -1.50246E+01, -1.83415E-03, 8.06807E-13, 3.46302E-33, -1.32290E-74 )
( 5.64193E-01, -2.80997E+00, 7.49210E+00, 8.86292E-04, -3.93149E-13, -1.68219E-33, 6.43262E-75 )
( -2.76518E-01, 6.01798E+00, -1.25341E+00, -3.04790E-04, 1.08388E-13, 4.99769E-34, -1.86434E-75 )
なので、逆行列と右辺の積から √6, √10, √14, √15, √21, √35, √210 の値が計算できます。
最後に、二つの ( 一つだけ 4 つのものもありますが ) 異なる素数の積の平方根が無理数になることの証明ですが、これは √2 が無理数であることの証明法を応用すれば簡単に求められます。
二つの異なる素数の積の平方根 √pq が有理数 m / n ( 但し m, n は互いに素 ) と等しいとします。両辺を二乗すると
pq = m2 / n2 より
n2pq = m2
なので、m は p, q の両方を素因数に持ちます。m = m'pq とすると、
n2pq = m'2p2q2 より
n2 = m'2pq
となります。ところが、これが成り立つためには n が p, q の両方を素因数に持たなければなりません。これは最初の仮定 ( m, n が互いに素である ) に反します。従って、 √pq は無理数であることになります。4 つの異なる素数の積の平方根が無理数であることも同様に証明できますし、任意の数の異なる素数の積の平方根について成り立つことも理解できると思います。
-----
例によって、合っているという保証は全くありません。気になるのが、素数の平方根を任意の数だけ加算したとき、それは必ず無理数になるのかどうかというところです。これが証明できれば上の問題も自明になるのですけどね。
年末になると大掃除と同時に不要品の整理なんかをします。いつも思いますが、普段からやっておけば慌てる必要もないんですよね。しかし、なぜかそれができない。そろそろ、なんとかしなければ。PCのバックアップもこの頃に行います。これも普段からしておけばいいんですけど、それをしないのでもしものときに慌てふためく事になるわけです。で、RAID付きの外付けディスクでも買おうかと悩んでいます。結構高いんですよね。
今年最後になるかもしれない数学の問題へのチャレンジです。結構前から悩んでいた問題で、ようやく一つの解き方を見つけたといった感じです。しかし、解き方は完全ではないし、他にもっとエレガントな解き方があるのではないかと思います。出題は「数学問題bot」からです。
-----
■ √2 + √3 + √5 + √7 が無理数であることを証明せよ (近畿大学第12回数学コンテスト)
まず、q を有理数として √2+√3+√5+√7 = q が成り立つとします。この両辺の二乗を計算します。
( √2+√3+√5+√7 )2
= 2 + 3 + 5 + 7 + 2_2:3 + 2_2:5 + 2_2:7 + 2_3:5 + 2_3:7 + 2_5:7
= 17 + 2_2:3 + 2_2:5 + 2_2:7 + 2_3:5 + 2_3:7 + 2_5:7 = q2 より
2:3 + 2:5 + 2:7 + 3:5 + 3:7 + 5:7 = q2 / 2 - 17 / 2
となります。但し、2_2:3 = 2√2√3 を表しています。このとき、右辺はやはり有理数となります。これをもう一度二乗します。
( 2:3 + 2:5 + 2:7 + 3:5 + 3:7 + 5:7 )2
= 6 + 10 + 14 + 15 + 21 + 35 + 24_2:3 + 20_2:5 + 16_2:7 + 18_3:5 + 14_3:7 + 10_5:7 + 6_2:3:5:7
= ( q2 / 2 - 17 / 2 )2 より
24_2:3 + 20_2:5 + 16_2:7 + 18_3:5 + 14_3:7 + 10_5:7 + 6_2:3:5:7 = ( q2 / 2 - 17 / 2 )2 - 101
となります。ここでも右辺はやはり有理数です。これを繰り返すと、左辺は常に 2:3, 2:5, 2:7, 3:5, 3:7, 5:7, 2:3:5:7 の線形結合で表され、右辺は常に有理数です。
左辺が ( K1_2:3 + K2_2:5 + K3_2:7 + K4_3:5 + K5_3:7 + K6_5:7 + K7_2:3:5:7 )2 のとき、これを展開すると
( 6K12 + 10K22 + 14K32 + 15K42 + 21K52 + 35K62 + 210K72 ) +
( 10K2K4 + 14K3K5 + 70K6K7 )_2:3 + ( 6K1K4 + 14K3K6 + 42K5K7 )_2:5 +
( 6K1K5 + 10K2K6 + 30K4K7 )_2:7 + ( 4K1K2 + 28K3K7 + 14K5K6 )_3:5 +
( 4K1K3 + 20K2K7 + 10K4K6 )_3:7 + ( 12K1K7 + 4K2K3 + 6K4K5 )_5:7 +
( 2K1K6 + 2K2K5 + 2K3K4 )_2:3:5:7
となるので、( K1, K2, K3, K4, K5, K6, K7 ) = ( 1, 1, 1, 1, 1, 1, 0 ) を初期値として二乗したときの式を無限に作成することができます。その中の 7 つの式を使って連立方程式を計算すれば、2:3 から 2:3:5:7 までの値を求めることができます。ところが、右辺は有理数なので、その解はやはり有理数になります。これは、2:3 から 2:3:5:7 までの値が全て有理数であることを意味します。しかし、これらは無理数であるため、最初の仮定に矛盾します。従って、√2+√3+√5+√7 は無理数です。
次に、この連立方程式が解を持つことを示さなければなりません。が、これは証明することができなかったので、実際に数値計算をしてみることにしました。まず、連立方程式の係数を求めるプログラムを作成します。
template<class T> void calcK( const std::vector<T>& k, std::vector<T>* res )
{
if ( k.size() != 8 ) return;
res->resize( k.size() );
(*res)[0] = 6 * k[1] * k[1] + 10 * k[2] * k[2] + 14 * k[3] * k[3] +
15 * k[4] * k[4] + 21 * k[5] * k[5] + 35 * k[6] * k[6] +
210 * k[7] * k[7];
(*res)[1] = 10 * k[2] * k[4] + 14 * k[3] * k[5] + 70 * k[6] * k[7];
(*res)[2] = 6 * k[1] * k[4] + 14 * k[3] * k[6] + 42 * k[5] * k[7];
(*res)[3] = 6 * k[1] * k[5] + 10 * k[2] * k[6] + 30 * k[4] * k[7];
(*res)[4] = 4 * k[1] * k[2] + 28 * k[3] * k[7] + 14 * k[5] * k[6];
(*res)[5] = 4 * k[1] * k[3] + 20 * k[2] * k[7] + 10 * k[4] * k[6];
(*res)[6] = 12 * k[1] * k[7] + 4 * k[2] * k[3] + 6 * k[4] * k[5];
(*res)[7] = 2 * k[1] * k[6] + 2 * k[2] * k[5] + 2 * k[3] * k[4];
}
int main( int argc, char* argv[] )
{
std::vector<double> k( 8, 1 );
k[0] = 8.5;
k[7] = 0;
std::vector<double> res;
for ( unsigned int i = 0 ; i < 7 ; ++i ) {
for ( std::vector<double>::const_iterator cit = k.begin() ;
cit != k.end() ; ++cit )
printf( "%f ", *cit );
std::cout << std::endl;
calcK( k, &res );
k = res;
}
}
初期値を 定数項 17 / 2、2:3:5:7 の係数をゼロ、その他を全て 1 として、( √2+√3+√5+√7 )2 をスタートとして最初の 7 つの方程式を求めます。すると、定数項を含めた係数行列は次のようになります。
( 定数項, K1, K2, K3, K4, K5, K6, K7 ) =
( 8.50000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 1.00000E+00, 0.00000E+00 )
( 1.01000E+02, 2.40000E+01, 2.00000E+01, 1.60000E+01, 1.80000E+01, 1.40000E+01, 1.00000E+01, 6.00000E+00 )
( 3.10760E+04, 1.09360E+04, 8.36000E+03, 7.25600E+03, 6.56800E+03, 5.73600E+03, 4.52000E+03, 1.61600E+03 )
( 4.75505E+09, 1.64307E+09, 1.27944E+09, 1.07266E+09, 1.05699E+09, 8.84475E+08, 6.80756E+08, 2.90082E+08 )
( 1.15754E+20, 4.06293E+19, 3.14194E+19, 2.66279E+19, 2.55509E+19, 2.16682E+19, 1.68184E+19, 6.76792E+18 )
( 6.88744E+40, 2.40734E+40, 1.86577E+40, 1.57542E+40, 1.52542E+40, 1.28776E+40, 9.96809E+39, 4.08898E+39 )
( 2.43947E+82, 8.53950E+81, 6.61344E+81, 5.59108E+81, 5.39745E+81, 4.56340E+81, 3.53560E+81, 1.44110E+81 )
定数項は右辺に移行すると、係数行列は 7 行 7 列の正方行列になります。Excel 等でこの行列式を計算すると、-7.97570E+135 という値になります。つまり、係数行列は非特異なので、この連立方程式は解くことができることになります。ちなみに、√2+√3+√5+√7 = 8.02808 を使って右辺の値を求めると
( 2.37251E+01, 4.61879E+02, 1.82256E+05, 2.84622E+10, 6.94340E+20, 4.13234E+41, 1.46368E+83 )
となり、係数行列の逆行列は
( -3.46178E-01, 8.39753E+00, -4.03202E+00, -6.10160E-04, 2.46200E-13, 1.08539E-33, -4.10863E-75 )
( -1.03701E+00, -3.55841E+01, 1.34416E+01, 2.11717E-03, -8.41981E-13, -3.72926E-33, 1.40945E-74 )
( 1.27076E-03, 1.74473E+01, -2.33385E+00, -5.04553E-04, 1.80766E-13, 8.28950E-34, -3.09690E-75 )
( -1.00712E-01, 1.20718E+01, 4.56727E-01, -5.46006E-05, 1.35736E-15, 3.40899E-35, -9.26729E-77 )
( 1.91843E+00, 4.77461E-01, -1.50246E+01, -1.83415E-03, 8.06807E-13, 3.46302E-33, -1.32290E-74 )
( 5.64193E-01, -2.80997E+00, 7.49210E+00, 8.86292E-04, -3.93149E-13, -1.68219E-33, 6.43262E-75 )
( -2.76518E-01, 6.01798E+00, -1.25341E+00, -3.04790E-04, 1.08388E-13, 4.99769E-34, -1.86434E-75 )
なので、逆行列と右辺の積から √6, √10, √14, √15, √21, √35, √210 の値が計算できます。
最後に、二つの ( 一つだけ 4 つのものもありますが ) 異なる素数の積の平方根が無理数になることの証明ですが、これは √2 が無理数であることの証明法を応用すれば簡単に求められます。
二つの異なる素数の積の平方根 √pq が有理数 m / n ( 但し m, n は互いに素 ) と等しいとします。両辺を二乗すると
pq = m2 / n2 より
n2pq = m2
なので、m は p, q の両方を素因数に持ちます。m = m'pq とすると、
n2pq = m'2p2q2 より
n2 = m'2pq
となります。ところが、これが成り立つためには n が p, q の両方を素因数に持たなければなりません。これは最初の仮定 ( m, n が互いに素である ) に反します。従って、 √pq は無理数であることになります。4 つの異なる素数の積の平方根が無理数であることも同様に証明できますし、任意の数の異なる素数の積の平方根について成り立つことも理解できると思います。
-----
例によって、合っているという保証は全くありません。気になるのが、素数の平方根を任意の数だけ加算したとき、それは必ず無理数になるのかどうかというところです。これが証明できれば上の問題も自明になるのですけどね。