tsujimotterのノートブック

日曜数学者 tsujimotter の「趣味で数学」実践ノート

【旧ブログ記事】40-32÷2=4!の一般解


本記事は2012年5月10日に、当時のtsujimotterが骨折で入院中に暇を持て余して執筆し、旧ブログで公開していた記事の再掲です。
久しぶりに読んで面白かったのと、旧ブログは将来無くなる可能性があることから、tsujimotterのノートブックにも載せておこう思います。よろしければご覧いただければと思います。
できるだけ当時の雰囲気を残しておきたいので、文章には原則手を入れていません。

(1) 問題提起

 40 - 32 \div 2 = 4!

が流行っているようなので、暇つぶしにこのパターンの式をどれだけ作ることが出来るのか考えて見ます。本記事はfacebookに投稿していたものをブログ用にまとめたものです。

まずこの問題は、下記の二式を満たす4つの整数  x, y, z, w を求める問題として定式化されます。

 \begin{align} x - \frac{y}{z} &= w! \tag{1} \\
\frac{x - y}{z} & = w \tag{2} \end{align}

ここで、式2つに対して、変数4つなので、自由度は2です。2つ変数を決めれば、残りは決まります。注意すべきは、整数という制限がつくため、2つ決めてもそれを満たす解がない場合があることです。
式変形して議論しやすい形に持って行きます。


 (1)(2)の両辺に  z を掛けて、 (1′)(2′)とする。 (1′) - (2′) として、

 (z - 1)x = z(w! - w) \tag{3'}

戦略としては、これで  y が消えたので、 w z を適当に決めて  x を求める。

 \begin{align} x = \frac{z(w! - w)}{z - 1} \tag{3} \end{align}

得られた  x, z, w (2) に代入して  y を求める。

 \begin{align} y = x - zw \tag{4} \end{align}


 z, w を決めても  x, y がないかもしれないことに注意。


さて、ここからどう攻めるかですが…
まずは、基本問題の  w = 4 から行きましょう。
 (3) に代入すると

 \displaystyle x = \frac{20z}{z - 1}

この式に  z を適当に代入して評価して行きましょう。 z = 2 からいきます。


 z = 2 のとき。

 \displaystyle x = \frac{20\cdot 2}{1} = 40

 (4) に代入して、

 \displaystyle y = 40 - 2 \cdot 4 = 32

したがって、

 \displaystyle \therefore (x, y, z, w) = (40, 32, 2, 4)

当然これは元の式で自明です。どんどん行きましょう。


 z = 3 のとき、

 \displaystyle x = \frac{20\cdot 3}{2} = 30
 \displaystyle y = 30 - 3 \cdot 4 = 18

よって、

 \displaystyle \therefore (x, y, z, w) = (30, 18, 3, 4)

だんだん  x, y がちいさくなってますね。下限があるのでしょう。


 z = 4 のとき。

 \displaystyle x = \frac{20\cdot 4}{3}

より…って右辺が  3 で割れないから無理!よって解なし。だんだん面白くなってきた。


 z = 5 のとき。

 \displaystyle x = \frac{20\cdot 5}{4} = 25
 \displaystyle y = 25 - 5 \cdot 4 = 5

したがって、

 \displaystyle \therefore (x, y, z, w) = (25, 5, 5, 4)

そろそろ打ち止めの予感。


 z = 6 のとき。

 \displaystyle x = \frac{20\cdot 6}{5} = 24

さあここで、

 \displaystyle y = 24 - 6 \cdot 4 = 0

 y が1以上の整数であることから不成立。打ち止めです。


つまり  w = 4 のとき、 (4) から

 x > 4z

より、 (3) と合わせて、

 \displaystyle \frac{20z}{z - 1} > 4z

を満たす  z だけが解であることがわかったわけです。

これより、

 \displaystyle 20z > 4z(z - 1)
 \displaystyle \therefore 5 > z - 1
 \displaystyle \therefore z < 6

つまり、 z の上界が  5 ということがわかります。それ以上の  z は打ち止め。

これでずいぶんと話が楽になりそうです。


ここで、話を飛躍させて、 w = 5 の場合をかんがえてみましょう。

 \displaystyle \therefore w! = 120
 \displaystyle \therefore w! - w = 115

よって、 z の条件は、

 \displaystyle \frac{115z}{z - 1} > 5z
 \displaystyle \therefore 23 > z - 1

となって、

 \displaystyle \therefore z < 24

ちょっと確認したくないぐらいの数になってきました…


まてよ、これ一般の  w に対してもおんなじ用*1に考えられるな。


一般に、

 \displaystyle \frac{z(w! - w)}{z - 1} > zw

これを計算すると

 \displaystyle z(w! - w) > zw(z-1)
 \displaystyle ((w-1)! - 1) > (z-1)

したがって、

 \displaystyle \begin{align} z < (w - 1)! \tag{5} \end{align}

おー、すごく簡単な式になった!式番号つけちゃえ


そうか、さっき感じた「これ計算するのかったるそうだ」というのは  z を押さえる不等式の右辺が階乗で爆発するからなんだ。


さあ、いくらかこの問題の性質がわかってきた。しかし、まだまだ謎は残っている。果たして  w はいくらでも大きく出来るのか、そして  z, w が決まったとき、解なしという例外はいつ発生するのか。次節に続く(笑)


(2)  z の条件

まだもう少し続けられそうなので、解なしの部分に関してもう少し考えて見ます。


 w = 4, z = 4 のとき、

 \displaystyle x = \frac{20\cdot 4}{3}

を満たす解はありませんでした。

 4 3 で割れませんから、 20 3 が割り切るか考えればよいのですが、 20 の素因数分解は  2 \cdot 2 \cdot 5 なので、当然割れませんね。


同様に  z \geq 3 のいかなる  z に対しても、

 (z - 1) \mid z

は成り立ちません。

ここで

 n \mid m \;\; \Longleftrightarrow \;\; n m の約数

したがって

 \begin{align} (z - 1) \mid (w! - w) \end{align} \tag{6}

が成り立つかどうか判定できればよいことがわかります。


ここからが、大きな問題。 w! - w の約数なんてどうやって考えたらいいんだと。


 w! - w

 w! - w = w((w-1)! - 1)

のように因数分解される。

ややこしいな。つまり、 z - 1 w (w-1)! - 1 の約数だったらいいわけだ。


 (w-1)! - 1 をためしにいくつか計算してみよう。

 (4-1)! - 1 = 5
 (5-1)! - 1 = 23
 (6-1)! - 1 = 119
 (7-1)! - 1 = 719
 (8-1)! - 1 = 5039
 \cdots

あれ、もしかして全部素数?!

※注:この記述には誤りが含まれます。


つまり、 (w - 1)! - 1 が素数と仮定すると、 x が存在するような  z は、 z - 1 w の約数であるか、または、 (w - 1)! - 1 そのものであるときに限られるということだ!これはすごいかもしれない!


ここで、前に計算した  z の条件を思い出そう。

 \displaystyle z < (w - 1)! \tag{5再掲}

である。さっきの素数そのものである

 z - 1 = (w - 1)! - 1

は、

 z = (w - 1)!

であるから、条件を照らし合わせてギリギリアウト!


よって、 x の存在する  z の条件は、 z - 1 w の約数であること、つまり

 \displaystyle \begin{align} (z - 1) \mid w \tag{7} \end{align}

ずいぶんとシンプルになった。


確認のために、 w = 4 のときを考える。

 4 の約数は  1, 2, 4。つまり、 z - 1 = 1, 2, 4 すなわち、  z = 2, 3, 5 のときのみに解が存在することが分かればいい。確かにそうなってる!


ってことは、 w = 5 のときは、約数は  1, 5 だけだから、 z = 2, 6 のときだけ探せばいいね!あら簡単!


こうやって考えると、任意の  w に対する解の個数は、約数の個数関数  d(w) で表せるということ。

※2012/05/12修正: d(w) をオイラー関数と言っていましたが、これは違いましたね。



これで、結論は出ました。
「40-32÷2=4! に類似する問題はいくつ見つけることが出来るのか」という疑問でしたが、かなりシンプルにまとまったと思います。

結論:

 w は任意にとってOK。
解はそれぞれの  w に対して  d(w) 個とることができる。
 z は対応する  w の約数+1。
 x, y はそれぞれ  w, z に対して下式の通り一意に求められる。
 \displaystyle x = \frac{z(w! - w)}{z - 1}
 \displaystyle y = x - wz


おっと、そうは問屋がおろさねえ!ウィキペディアの階乗素数の項目によると、

 n! - 1

の形の素数は確かに存在するけれど、全部が素数ではないらしい…オーノー。やっぱりそう簡単にはいかないか。
まぁ、 (w - 1)! - 1 が合成数なら、素因数分解してしまって、

 z の条件

 \displaystyle z < (w - 1)! \tag{5再掲}

を満たすような  z を、 w の素因数と  (w-1)! - 1 の素因数の組から適当に作って、 x y を計算すれば求める解が得られます、と言うこともできます。


次節以降で、これを実際に計算して、馬鹿でかい数の等式を作ってみましょう。


(3) 階乗素数との関係

さて、前節までに分かったことを一旦まとめてみましょう。

まず問題ですが、

 \begin{align} x - \frac{y}{z} &= w! \tag{1再掲} \\
\frac{x - y}{z} & = w \tag{2再掲} \end{align}

を満たすような  1 以上の正整数  x, y, z, w を求めよという問題でした。


これに対し、これまでの議論から、適当な  z, w を選ぶと

 \displaystyle x = \frac{zw( (w-1)! - 1)}{z - 1} \tag{3をやや変形}
 \displaystyle y = x - zw \tag{4再掲}

と解が得られることがわかっています。


ただし、 w に対する  z において、解が得られるための下記の制約条件がありました。

 \displaystyle z < (w - 1)! \tag{5再掲}
 \displaystyle (z-1) \mid (w( (w-1)! - 1)) \tag{6をやや変形}

条件  (5) は 式  (4) に対し  y > 0 から得られます。一方、条件  (6) は式  (3) x が整数であることから導かれました。



ここで  (6) を考えた時に、もし仮に  (w-1)! - 1 が素数だとすると、

 w( (w-1)! - 1) の約数の集合」 = 「 w の約数の集合」 + 「 w のそれぞれの約数 ×  (w-1)! - 1 の集合」

がすべての  z - 1 の候補の集合となります。

 w のそれぞれの約数 ×  (w-1)! - 1 の集合」は条件  (5) を満たしませんから、
結果  z の候補は 「 w の約数+1」に限られます。


 (w - 1) = n としたとき、 (w-1)! - 1 = n! - 1 と表されるわけですが、このような形で表される素数は階乗素数と呼ばれます。実際計算してみるとわかりますがすべての  n! - 1 が階乗素数となるわけではありません。

3!-1 = 5
4!-1 = 23
6!-1 = 719
7!-1 = 5039
12!-1 = 479001599
14!-1 = 87178291199

は階乗素数ですが、下記は合成数となります。

5!-1 = 7 * 17
8!-1 = 23 * 1753
9!-1 = 11^2 * 2999
10!-1 = 29 * 125131
11!-1 = 13 * 17 * 23 * 7853
13!-1 = 1733 * 3593203
15!-1 = 17 * 31^2 * 53 * 1510259
16!-1 = 3041 * 6880233439
17!-1 = 19 * 73 * 256443711677
18!-1 = 59 * 226663 * 478749547
19!-1 = 653 * 2383907 * 78143369
20!-1 = 124769 * 19499250680671
21!-1 = 23 * 89 * 5171 * 4826713612027
22!-1 = 109 * 60656047 * 170006681813
23!-1 = 51871 * 498390560021687969

翻って、階乗素数となる、本問題の解を列挙してみると、たとえば  w - 1 = 3, 4, 6, 7 のときは、

40 – 32 / 2 = 4!
30 – 18 / 3 = 4!
25 – 5 / 5 = 4!
230 – 220 / 2 = 5!
138 – 108 / 6 = 5!
10066 – 10052 / 2 = 7!
5752 – 5696 / 8 = 7!
80624 – 80608 / 2 = 8!
60468 – 60444 / 3 = 8!
50390 – 50350 / 5 = 8!
45351 – 45279 / 9 = 8!


となって確かに「 w の約数+1」の  z のときに解が得られることがわかります。



同様に、もっと大きな数の階乗素数を考えれば、いくらでも問題を作ることができます。

Wikipediaによると、現在知られている階乗素数は、 n がそれぞれ

3, 4, 6, 7, 12, 14, 30, 32, 33, 38, 94, 166, 324, 379, 469, 546, 974, 1963, 3507, 3610, 6917, 21480, 34790, 94550, 103040

のときであるから、 w = 103041 として問題を作ることも原理的には可能です。 103040! が正確に計算できれば、ですが(笑)。

 103040! - 1 が階乗素数であることは、2010年12月14日にJ. Winskillによって発見されたそうです(MathWorld “Factorial Prime” 記事より)。*2



次は、 (w - 1)! - 1 が合成数の場合について考えてみましょう。


(4) 巨大因数の探索

前節から続いて、 (w - 1)! - 1 が合成数である場合を考えましょう。

基本的な考え方は素数の場合と同じです。


解を持つ  z の条件は、

 \displaystyle z < (w - 1)! \tag{5再掲}
 \displaystyle (z-1) \mid (w( (w-1)! - 1)) \tag{6をやや変形}

です。


 (6) より、 w の素因数と、 (w - 1)! - 1 の素因数をそれぞれ求めて、 その組合せから  w( (w - 1)! - 1) のすべての約数を求めればよいでしょう。そのときは、 (5) の条件も考慮して不必要な要素を省いていきます。


さて、ここまで、最初の問題の解のパターンを、すべて導出するという目的で議論してきましたが、これらの問題はある種のパターンの合成数に対する素因数分解の問題に深くかかわっていることがわかってきました。

とても残念ですが、素因数分解の問題を一般性を残したまま扱うのは、そろそろ限界かもしれません。




そこで、視点を変えて、大きな  w の値に対して、 x, y, z, w を計算するということにチャレンジしてみます。


大きいといっても  w! を計算するわけですからあまり大きくし過ぎると、数値が爆発してしまいます。

また  (w - 1)! - 1 の素因数分解も困難になりますので、適度なところをとって  w = 24 としてみましょう。このとき、  (w - 1)! - 1 は合成数となります。

 23! - 1 = 51871 \cdot 498390560021687969


また  w = 24 を素因数分解すると、

 24 = 2^3 \cdot 3

となります。


 z - 1 の候補はそれぞれの積の約数ですから、

 24 から  2^2 \cdot 3 = 12 23! - 1 から  51871 の約数をそれぞれとって

 z - 1 = 2^2 \cdot 3 \cdot 51871 = 622452

を選んでみます。すると

 z = 622453


これを、 x, y の式に代入して計算します。

 \displaystyle x = \frac{zw((w-1)! - 1)}{(z - 1)} = 620449398514359482735914
 \displaystyle y = x - zw = 620449398514359467797042


したがって、求める式は、

 620449398514359482735914 - 620449398514359467797042 \div 622453 = 24!


私はこれをJavaのプログラムで計算しましたが、

どうやらWindowsの関数電卓でも桁落ちなしで計算できるようです。(Windows意外とできる子です笑)

ちなみにgoogleさんの電卓は浮動小数点になってだめでした。

それぐらい大きな数の計算ができるようになったわけです。

ひとまずここまで。



追記[2012/11/29]

Rubyでのソースコードを追加してみました。

Javaと違ってBigintなどの型に自動で変換されるようですね。ソースコードが非常に簡潔です。

# 階乗を計算する関数
def fact(n)
    if n==0 then
        return 1
    else
        return fact(n-1)*n
    end
end
 
# 数値の定義
w = 24
z = 622453
x = z * w * (fact(w-1)-1)/(z-1)
y = x - z * w
 
# 解の表示
puts "# x - y / z = w!"
puts "# (x - y)/ z = w"
puts "x = "+x.to_s
puts "y = "+y.to_s
puts "z = "+z.to_s
puts "w = "+w.to_s

追記[2024/08/22]

時代も変わっているので、Pythonでのソースコードを追加してみました。

# 階乗を計算する関数
def fact(n):
    if n == 0:
        return 1
    else:
        return fact(n-1)*n

 
# 数値の定義
w = 24
z = 622453
x = z * w * (fact(w-1)-1) // (z-1)
y = x - z * w
 
# 解の表示
print(f"# x - y / z = w!")
print(f"# (x - y)/ z = w")
print(f"x = {x}")
print(f"y = {y}")
print(f"z = {z}")
print(f"w = {w}")

感想(未来の自分より)

久しぶりに過去の記事(今から12年前)を読んでみて、(自分で言うのもなんですが)大変面白かったです。
文章は荒くて読みづらいですが、楽しそうに数学をしている感じが出ているのが良いですね。
最近のtsujimotterのノートブックは、専門的な内容を解説する系の記事が多いのですが、こんなふうに自由研究的に考えるのも楽しいかもしれません。


今読んでみると、文体が今の自分のものと異なることに気づきます。
この頃の文章はEMANの物理学さん(https://eman-physics.net)に大いに影響を受けている気がします。
(EMANの物理学さんは、私が学生時代に大変お世話になったサイトです。このサイトがあったからこそ、数学の発信をしようと思ったと言っても過言ではありません。)

佐野さんという方が以前(私の影響を受けて)ブログを始めたときに、「辻さんの文体に影響を受けすぎて僕らしさがない」みたいなことをおっしゃっていたのを思い出しました。私自身も、ブログを書いていくうちに自分らしい文章を獲得していったということなのですかね(?)。

注釈にも書きましたが、久しぶりにMathWorldの階乗素数の記事を見てみたら新しい素数が発見されていて、大変驚きました。


そういえば、世の中には同じようなことを考える人がいて、たとえばこちらのブログ記事があります。
yumulog.hatenablog.com

この記事をきっかけに、著者の方をTwitterでフォローしたのですが、10年以上経って今この湯村先生と一緒の職場で働いています。
不思議な縁ってあるものですね。笑


ここまで読んでくださってありがとうございます。
それでは今日はこの辺で!

*1:未来の自分からの注:おんなじ用 → おんなじ様

*2:2024年8月20日の未来よりの追記:今MathWorldの記事をみたら、階乗素数としては2013年8月13日に  147855! - 1 が、2016年7月25日に  208003! - 1 の2つがそれぞれ見つかっているようです。