題記の不定方程式の解き方を考えてみる。
分子は一般にmとする。分母は素数の場合のみを考えればよい。pとおく。
よって、より一般化した式、
m/p=1/a+1/b+1/c(ただし、m/p≦3)
について考えてみる。
まず、1≦a≦b≦c としても一般性を失わない。
aの範囲を限定する。
0<1/c≦1/b≦1/a≦1 ∴ m/p=1/a+1/b+1/c≦3/a ∴ a/3≦p/m ∴ a≦3p/m
一方、m/p>1/a だから、
a>p/m
以上、まとめると、
p/m<a≦3p/m
尚、この条件を、プログラム内の for 〜 next 文の境界条件として使用する場合、
整数化しておいた方が扱いやすい。aは整数なので、境界条件も整数化すると、
int(p/m)+1≦a≦int(3p/m)
となる。
今度は、bの範囲を限定する。
上記で求めたaに対し、
m/p−1/a=(ma-p)/pa =d/e
とおく。上記と同じ議論により、
e/d<b≦2e/d
となる。a≦bも考慮に入れると、整数化した条件は、
max{a,int(e/d)+1}≦b≦int(2e/d)
となる。
上記bに対し、
d/e−1/b=(db−e)/eb =1/c
∴ db−e | eb のとき、 (注:a|bは、「aはbを割り切る」という意味。例えば、2|6)
c=eb/(db−e)
以上より、与えられたm、pから、
m/p=1/a+1/b+1/c(ただし、m/p≦3)
を満たすa、b、cを求めるプログラムは次のようになる。
前 | この章の目次 | 次 |
---|