本来ならば2月5日か5月2日に投稿するべき問題。
自然数m, nにおいて、
m/n=n.m
5/2=2.5
左辺は分数、右辺は小数、となるようなm, nは(m,n)=(5,2)以外に存在するのか。
自分は、(m,n)=(5,2)以外存在しないだろうと予想はしている。
何も考えずにプログラミングして、近いものを探してみた。
nは等しく、mは±1未満で探してます。
5/2 = 2.5
89/9 > 9.88...
101/10 > 10.100
294/17 < 17.294...
368/19 < 19.368...
641/25 > 25.640
5975/77 > 77.5974...
9899/99 > 99.9898...
998999/999 > 999.998998...
3112245/1764 > 1764.3112244...
60005164/7746 > 7746.60005163...
99989999/9999 > 9999.99989998...
385265946/19628 < 19628.385265946...
388925511/19721 > 19721.388925510...
957932148/30950 < 30950.957932148...
9999899999/99999 > 99999.9999899998...
51867447661/227744 > 227744.51867447660...
999998999999/999999 > 999999.999998999998...
とりあえず、プログラミングでは、これくらいまでしか探しきれていません。
多倍長演算をしないことには、これ以上は桁を増やせない状態です。
唯一、法則性が見いだせたのは、
89/9 > 9.88...
9899/99 > 99.9898...
998999/999 > 999.998998...
99989999/9999 > 9999.99989998...
9999899999/99999 > 99999.9999899998...
999998999999/999999 > 999999.999998999998...
99999989999999/9999999 > 9999999.99999989999998...
9999999899999999/99999999 > 99999999.9999999899999998...
999999998999999999/999999999 > 999999999.999999998999999998...
このパターン。
プログラミングではなく、机上の数学のみで、どこまで考えられるんだろうか。
左辺は分数表記、右辺は小数表記。
分母、分子ともに整数の分数は、数学的に言うと有理数という数に分類されます。
分母、分子が整数で表せるのあれば、有理数である。
有理数であれば、分母、分母を整数の分数で表せる。
という必要十分条件の関係にあります。
では、小数表記すると、どういうことが解るのだろうか。
有理数を小数表記すると、整数、有限小数、循環小数の3パターンが存在します。
まぁ、整数を有限小数に含めても良いので、実質2パターンとも言えます。
既約分数表記された有理数が、有限小数になるのか、循環小数になるのか、は、
分母に2や5しか素因数が存在しないならば、有限小数。
分母に2や5以外の素因数が存在するならば、循環小数。
となります。
新しい言葉が出てきました。
既約分数とは、
漢字の通り、既に約分されている分数。
つまり、既約分数とは、既に約分されていて、分母と分子に共通の約数が存在しない分数である。
数式で書くと、分母をm、分子をnとすると、gcd(m,n)=1ということで既約分数であることを示せます。
有限小数とは、
有限桁で表現出来る小数。
循環小数とは、
割り算において、同じ余りが繰り返されることによって、同じ羅列を繰り返す小数。
さて、なぜ既約分数の分母の素因数が2と5だけの場合と、2と5以外が含まれる場合で違いが出るのだろうか。
それは10進数で表記されているからにすぎません。
10を素因数分解すると、2×5、つまり素因数は2が1個、5が1個、2と5以外の素因数はありません。
m=10、n=3のとき、gcd(m,n)=1で既約分数ですが、
10/3=3.{3}
ただし、{}は循環節とする。
また新しい言葉が出てきました。
循環節とは、
循環小数における繰り返される共通の数字の羅列。
問題に戻ると、
m/n=n.m
と左辺は有理数、右辺は有限小数である。
m/nは既約分数とは限らないので、
gcd(m,n)=g
と最大公約数gを求める。
仮に、p=gm、q=gn、として、
m/n=(gp)/(gq)=p/q
と既約分数p/qとする。
有理数m/nが有限小数であるには、既約分数の分母qの素因数が2と5のみでなければならない。
問題文の
m/n=n.m
この表記は数学的には正しくないので、
数学的に正しく示すため、あえて右辺と左辺のm、nを別物として、右辺には'を付け、
m/n=n',m'
として、正しい数学の式にすると、
m/n=n'+m'/10k
k=ceil(log10(m))
仮に左辺のmを
m=n2+x
1≦x≦n-1
と置き換えると、
(n2+x)/n=n2/n+x/n=n+x/n
となり、
n=n'
は容易に等しい状態を作り出せる。
x/n=m'/10k
を示せるものが見つかればよいとなる。
x・10k=m'n
1≦x≦n-1
と両辺とも整数で表すことが出来た。
ここで、
m=m'
であれば解であるので、
x・10k=mn=(n2+x)n=n3+xn
k=ceil(log10(m))
1≦x≦n-1
(m,n)=(5,2)のケースを当てはめてみる。
x=5-22=1
k=ceil(log10(5))=1
x・10k=1・10k=10
mn=5×2=10
n3+xn=23+1×2=8+2=10
(m,n)=(101,10)のケースを当てはめてみる。
x=101-102=1
k=ceil(log10(101))=3
x・10k=1・103=1000
mn=101×10=1010
n3+xn=103+1×10=1000+10=1010
(m,n)=(641,25)のケースを当てはめてみる。
x=641-252=16
k=ceil(log10(641))=3
x・10k=16・103=16000
mn=641×25=16025
n3+xn=253+16×25=15625+400=16025
(m,n)=(957932148,30950)のケースを当てはめてみる。
x=957932148-309502=29648
k=ceil(log10(957932148))=9
x・10k=29648・109=29648000000000
mn=957932148×30950=29647999980600
n3+xn=309503+29648×30950=29647082375000+917605600=29647999980600
さて、左辺と右辺が等しいということは、
10kに着目すると、
mnの素因数2と素因数5の数はどちらもk以上必要だということが解る。
つまり、
x=mn/10k
m>n2
x=m-n2
1≦x≦n-1
k=ceil(log10(m))
いうことでもある。
数学的な考察はこれくらいで、自分の力では証明にたどり着けてはいません。
近いものを見つけるプログラミングの問題だとしても、どこの部分を使ってプログラミングするか、その辺もセンスを問われそうである。
結論の出ないままですが、
ではでは