エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

「40 - 32 / 2 = 4!」数学篇

前回前々回の続き。


もうちっと高速化を目指すために、数学的に考察してみます。
数学の証明なんてもう何年もやっていないので、書き方が変だったり厳密さに欠けたりしていると思いますが、コードに落とすのが目的ということでご容赦を。


ツッコミは、大歓迎です。

前提条件

ふたつの式それぞれを式1、式2とします。

\frac{a - b}{c} = n … (1)
a - \frac{b}{c} = n! … (2)


まず前提条件として。
正の整数を\mathbb{Z}^+とすると、


a,b,c,n \in \mathbb{Z}^+
n \in \mathbb{Z}^+から\frac{a - b}{c} \in \mathbb{Z}^+
またa - b \in \mathbb{Z}^+からb < a


同様に、
n! \in \mathbb{Z}^+からa - \frac{b}{c} \in \mathbb{Z}^+
ゆえに\frac{b}{c} \in \mathbb{Z}^+
ゆえにc \le b


これらをあわせると、
c \le b < a

n=1,2のばあい

n=1,2のばあいはn = n!なので、

a - \frac{b}{c} = \frac{a - b}{c}


両辺に\frac{b}{c}を加えると、

a = \frac{a}{c}
ゆえにc = 1


cを元の式に代入すると、

a - \frac{b}{1} = n
a - b = n
ゆえにb = a - n


もう一方の式に代入しても、

\frac{a - b}{1} = n
a - b = n
ゆえにb = a - n

と、おなじ結果が得られる。


結論として、n = 1,2のばあい、

b = a - n
c = 1
ただしanよりも大きい任意の正の整数

n=3のばあい

n=3のばあい、

n! = 2\cdot{}n

なので、

a - \frac{b}{c} = 2\cdot \frac{a - b}{c}
c\cdot{}a - b = 2\cdot{}(a - b)
c\cdot{}a - b = 2a - 2b
2a - c\cdot{}a = 2b - b
(2 - c)a = b
a = \frac{b}{2 - c}


ここでa,b,c \in \mathbb{Z}^+なので、aが正の数であるためにはc = 1でなければならない。しかしc = 1とするとa = bでなければならず、前提条件のb < aに反する。


結論として、n = 3のばあい、解なし。

n = 4以上のばあい

式2をbについて解くと、

a - \frac{b}{c} = n!
\frac{b}{c} = a - n!
b = c\cdot(a - n!)


前提条件から、

b \in \mathbb{Z}^+、つまりc\cdot{}(a - n1) \in \mathbb{Z}^+
ゆえにa - n1 \in \mathbb{Z}^+
ゆえにn! < a


また、b < aなので\frac{b}{c} < \frac{a}{c}となり、

a - \frac{b}{c} = n!
a - \frac{a}{c} < n!
c\cdot{}a - a < c\cdot{}n!
(c - 1)\cdot{}a < c\cdot{}n!
ゆえにa < \frac{c}{c - 1}\cdot{}n!


cが2以上の正の整数とすると、\frac{c}{c - 1} \le 2であるため、

ゆえにn! < a < 2\cdot{}n!(ただし2 \le c

c = 1のばあいは、既出のとおりn = 1,2のばあいになる)


また式2をcについて解くと、

a - \frac{b}{c} = n!
\frac{b}{c} = a - n!
c = \frac{b}{a - n!}


ここでb < aなので、

c = \frac{b}{a - n!}
ゆえにc < \frac{a}{a - n!}


結論として、n \ge 4のばあい、

n! < a < 2\cdot{}n!
2 < c < \frac{a}{a - n!}
b = c\cdot{}(a - n!)
となる条件と式1をみたすa,b,c,nの組み合わせ

で、コードは?

数式の変形でいっぱいいっぱいになりました。
コードはまた後日…。