ジョンは Excel で数値実験をするのが大好きだ。ある日、実験数学の一環として新しいテ
ーマに取り組むことにした。
まず、Excel に分析ツールのアドインを導入しておいた。これで GCD 関数が使えるように
なる。 GCD で最大公約数を求めることが楽にできる。 例えば GCD(24, 36) は 12 を返して
くれる。 GCD(数値1, 数値2) として使えば、数値1や数値2には最大 2^53 -1 までをツッコめ
る。これで準備は完了だ。早速ゴニョゴニョしてみることにした。
この日の実験数学のテーマはこうだ。すなわち、
(正の)自然数 n について関数 f を次のように定義する。: f(n) = n^5 +5
このとき、分数 f(n)/f(n+1) が約分可能かどうか知りたいのだ。
GCD(f(n),f(n+1))を計算した結果が 1 とならなければ約分可能というわけだ。
ややあって、ジョンはワークシートのセルに普通に計算式を定義するのは不利だと気付い
た。 そこで参考書を見ながら VBA でプログラミングすることにした。少々作業をして虫取を
行い、 GCD が許容する範囲の全てで、約分可能な n が見つかれば それを print 用のワ
ークシートに書き出すこととした。そしてプログラムを実行してジョンは眠りについた。
数日後にプログラムが終了した。ジョンは 書き出されているはずの約分が可能な n を調
べてみた。 そのような n は見つからなかったのだった。
ジョンはとても面白いと感じた。友人のポールに相談してみた。 f(n)/f(n+1) が約分できる
ような n を探してみないかと。ポールは python の使い手だった。早速プログラムを作成し、
とりあえず n ≦ 500000 の範囲で検証してみたが、 約分可能なものはみつからなかった。
ポールがジョンにその事実を伝えたところジョンは大層喜んだ。
数日後、ジョンはインターネット上にある数学系の掲示板に投稿した。
《n を自然数とする。(n^5 +5)/((n+1)^5 +5) が約分できないことを【証明】した。》
また、あわせて付記した。
《n が 500000 までプログラムで確認済みである。これが証明の根拠だ》
と。投稿の反応はイマヒトツだった。
ある人曰く:「任意の n について何も語っていないではないか。」
ある人曰く:「証明とは認めがたい」
ジョンは反駁した。
「n が 500000 まで私の説は確認済みだ、私の説を間違いだと指摘できていないのは皆さん
だ。反例を出してくれない限り私は私の証明が正しいと主張する。」
掲示板の参加者が反応した。
「まず任意の n について証明を書いてくれ。話はそれからだ。」
ジョンは更に反駁する。
「1 から 500000 まで確認したのだから、大丈夫だ、これは立派な証明だ。」
掲示板の参加者が再度反応した。
「ジョンは証明とやらを 1 行も書いていない。まず任意の n について証明を書いてくれ。
話はそれからだ。」
※ 約分できるような n は実在しますが、その事実と上記の喩え話とは切り離してお考え頂
ければと。
533360^5+5 = 5*78803*1968751*55641478729429717
533361^5+5 = 2*31*1968751*549756587*643210846049
#この話の元ネタを知ったのは、 昔、数学の部屋 BBS で…です。
GAI さんからのコメントです。(令和3年11月7日付け)
これって、f(n)=n^17+9 としておくと、もっと面白くなりますよ。
H.Nakao さんからのコメントです。(令和3年11月7日付け)
■最初に、gcd(n^5+1,(n+1)^5+5)!=1となるnを探してみる。
以下の簡単な計算により、
n≡533360 (mod 1968751) ならば、gcd(n^5+1,(n+1)^5+5)=1968751 !=
1
であることが分かる。
[Pari/GPによる計算]
gp > g(n)=gcd(n^5+5,(n+1)^5+5)
%181 = (n)->gcd(n^5+5,(n+1)^5+5)
gp > find(m1,m2)=for(i=m1,m2,if(g(i)>1,print([i,g(i)])))
%182 = (m1,m2)->for(i=m1,m2,if(g(i)>1,print([i,g(i)])))
gp > find(1,500000)
time = 383 ms.
gp > find(500001,10^7)
[533360, 1968751]
[2502111, 1968751]
[4470862, 1968751]
[6439613, 1968751]
[8408364, 1968751]
time = 7,805 ms.
gp > [2502111-533360,4470862-2502111,6439613-4470862,8408364-6439613]
%185 = [1968751, 1968751, 1968751, 1968751]
gp > g(1968751*n+533360)
%186 = 1968751
gp > factor(1968751)
%187 =[1968751 1]
■次に、他に解が無いことを示す。
A=n^5+5、B=(n+1)^5+5 とする。
ある素数pがA,Bの両方を割り切るならば、(多項式A.Bのresultantである1968751を使って)
pは、A*(-31320*n^4 - 139565*n^3 - 226290*n^2 - 67545*n + 216749)+B*(31320*n^4
- 17035*n^3 - 1735*n^2 - 66630*n + 147501)=1968751を割り切る。
1968751は素数なので、p=1968751である。
よって、A=n^5+5 と B=(n+1)^5+5 の両方が p=1968751 で割り切れるnを求めれば良い。
簡単な計算により、n≡533360 (mod 1968751) であることが分かる。
[pari/GPによる計算]
gp > A=n^5+5;B=(n+1)^5+5;
gp > polresultantext(A,B)
%194 = [-31320*n^4 - 139565*n^3 - 226290*n^2 - 67545*n + 216749,
31320*n^4 - 17035*n^3 - 1735*n^2 - 66630*n + 147501, 1968751]
gp > A*(-31320*n^4 - 139565*n^3 - 226290*n^2 - 67545*n + 216749)
+B*(31320*n^4 - 17035*n^3 - 1735*n^2 - 66630*n + 147501)
%195 = 1968751
gp > p=1968751;for(i=0,p-1,if((i^5+5)%p==0 && ((i+1)^5+5)%p==0,print(i)))
533360
time = 521 ms.
Dengan kesaktian Indukmu さんからのコメントです。(令和3年11月7日付け)
GAI さん、ご教示を有り難うございます。
これって、f(n)=n^17+9 としておくと、もっと面白くなりますよ。
→ うわぁぁ でかい……
gcd[n^17 + 9, (n+1)^17 + 9] = 1
for all n <8424432925592889329288197322308900672459420460792433,
at which point the GCD is not 1.
そして、A much longer string of 1's occurs if (17, 9) is replaced by (23, 6). だそうで。
全く理解できていませんが、f(n)=n^37+14 でも……?
◆参考URL
① Solution to puzzle 58: Fifth power plus five
② gcd(np+a,(n+1)p+a) の突然の裏切り予想
③ n5+5 と (n+1)5+5 の最大公約数 (→ 参考:当サイトの「質問に対する回答(20)」)
④ 「A003504」 https://oeis.org/A003504/a003504.txt
H.Nakaoさん、詳しい分析をまことに有り難うございます。
n^5+5、(n+1)^5+5 が共に 1968751 の倍数となるのは、n == 533360 mod 1968751 のときの
み、ということを理解するには、 基本中の基本を押さえておかなければ…そしてそうであった
としても難しいのだと痛感いたしました。
GAI さんからのコメントです。(令和3年11月8日付け)
nを自然数としたとき、最初に、gcd(n^37+14,(n+1)^37+14)が1で無くなるときの最小のnを
求めると、 n=11463916・・・・・・・・・4426 となったんですが、サイトの最後でのメモでは
n=11463916・・・・・・・・・4427 なので、確認して貰えませんか?
らすかるさんからのコメントです。(令和3年11月8日付け)
「n=11463916・・・・・・・・・4426」が正しいですね。
「n=11463916・・・・・・・・・4427」では、gcdが1になります。
Dengan kesaktian Indukmu さんからのコメントです。(令和3年11月8日付け)
ジョンは、新しいテーマに取り組むことにした。
n を 4 以上の自然数とする。2^n ≡ 3 (mod n) ……① 【となることはない】
……このことを証明出来たとジョンは思った。
ジョンは、彼なりに苦労して、4 ≦ n ≦ 2^31 の範囲で、①式が成立していないことを確か
めたのであった。
たかだか有限個の数値実験の結果は、任意の n についての証明、を意味していない。
このことをジョンが理解するのを助けるために、「A036236」より
2^n == 3 (mod n) for n = 4700063497, but for no smaller n > 1
GAI さんからのコメントです。(令和3年11月9日付け)
最小にこだわらなければ、以下のnでも 3 を引き起こすみたいですね。
M=[4700063497, 3468371109448915, 8365386194032363, 10991007971508067,
63130707451134435989380140059866138830623361447484274774099906755]
(コメント) 初心者のよくありがちなものとして、いくつかの実験結果から、その一般化を類
推する場合がある。もちろん、その類推が偶然にも正しい場合が時々あるが、多
くは間違っている場合の方が多い。成り立ちそうで成り立たない、そんな例を、
Dengan kesaktian Indukmu さんに触発されて、整理してみた。
(令和3年11月18日付け)
実例1 n=1 のとき、 n2+n+1=3 は素数である。
n=2 のとき、 n2+n+1=7 は素数である。
n=3 のとき、 n2+n+1=13 は素数である。
これらの試算から、「全ての自然数nに対して、n2+n+1は素数である。」と類推したが、
この類推は誤りである。
実際に、n=4 のとき、 n2+n+1=21=3×7 で、合成数である。
上記の実例1では、直ぐに成り立たない例が見つかりました。ちょっと考えると直ぐ分かる
が、ちょっと目眩ましの問題が次の実例2です。
実例2 n=1 のとき、 n2-n+41=41 は素数である。
n=2 のとき、 n2-n+41=43 は素数である。
n=3 のとき、 n2-n+41=47 は素数である。
・・・・・・・・・・・・・・・・・・・・・・・・・
n=40 のとき、 n2-n+41=1601 は素数である。
もう、こんなにたくさん試算したので、見切りをつけて、
「全ての自然数nに対して、n2-n+41 は素数である。」
と類推したが、この類推は誤りである。
実際に、n=41 のとき、 n2-n+41=41×41 で、合成数である。
このような誤った推論は、高名な数学者も往々にして「やっちゃった~」というものが、昔か
ら知られている。
実例3(フェルマー)
n=0 のとき、 2^(2^n)+1=3 は素数である。
n=1 のとき、 2^(2^n)+1=5 は素数である。
n=2 のとき、 2^(2^n)+1=17 は素数である。
n=3 のとき、 2^(2^n)+1=257 は素数である。
n=4 のとき、 2^(2^n)+1=65537 は素数である。
・・・・・・・・・・・・・・・・・・・・・・・・・・
この結果から、17世紀のフランスの有名な数学者フェルマーは、
「全ての自然数nに対して、2^(2^n)+1 は素数である。」
と類推したが、この類推は誤りである。
実際に、18世紀の偉大な数学者オイラーは、
n=5 のとき、2^(2^n)+1=4294967297=641×6700417
で、合成数であることを示した。
(多分、このことは、数学を学ぶ者にとって、よく知られた事実だろう。)
実例4(ライプニッツ)
nが任意の自然数のとき、
k=3 のとき、 nk-n=n3-n=(n-1)n(n+1) は、k=3 の倍数である。
k=5 のとき、 nk-n=n5-n=(n-1)n(n+1)(n2+1) は、k=5 の倍数である。
実際に、 n≡0 (mod 5) のときは明らか。
n≡1 (mod 5) のとき、 n-1≡0 (mod 5)
n≡2 (mod 5) のとき、 n2+1≡0 (mod 5)
n≡-2 (mod 5) のとき、 n2+1≡0 (mod 5)
n≡-1 (mod 5) のとき、 n+1≡0 (mod 5)
なので、示された。
k=7 のとき、
nk-n=n7-n=(n-1)n(n+1)(n2+n+1)(n2-n+1) は、k=7 の倍数である。
実際に、 n≡0 (mod 7) のときは明らか。
n≡1 (mod 7) のとき、 n-1≡0 (mod 7)
n≡2 (mod 7) のとき、 n2+n+1≡0 (mod 7)
n≡3 (mod 7) のとき、 n2-n+1≡0 (mod 7)
n≡-3 (mod 7) のとき、 n2+n+1≡0 (mod 7)
n≡-2 (mod 7) のとき、 n2-n+1≡0 (mod 7)
n≡-1 (mod 7) のとき、 n+1≡0 (mod 7)
なので、示された。
この結果から、17世紀のドイツの有名な数学者ライプニッツは、
「nが任意の自然数のとき、全ての奇数kに対して、nk-n は k の倍数である。」
と類推したが、この類推は誤りである。
実際に、k=9 のとき、任意の自然数nに対して、n9-n は 9 の倍数であるとは言えない。
例えば、n=2 のとき、n9-n=510 は9の倍数とはならない。(ライプニッツ自身が発見)
実例5(グラーヴェ)
素数 p=2 について、2p-1-1=1 は、p2=4 で割り切れない。
素数 p=3 について、2p-1-1=3 は、p2=9 で割り切れない。
素数 p=5 について、2p-1-1=15 は、p2=25 で割り切れない。
素数 p=7 について、2p-1-1=63 は、p2=49 で割り切れない。
素数 p=11 について、2p-1-1=1023 は、p2=121 で割り切れない。
素数 p=13 について、2p-1-1=4095 は、p2=169 で割り切れない。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
素数 p=997 について、
2p-1-1=6696928794914170755927656556625011316008780073159585046523439927
3146940695308507655824898675980991132974667057347071676574196580
3557696277249036098418660925245910485926514436588817162816398196
3673721363845654046864738713292124229724478464966298164321606997
79855408885478776864478289024177325354254335
は、p2=994009 で割り切れない。
この結果から、19世紀のソ連の有名な数学者デ・ア・グラーヴェ(1863-1939)は、
「全ての素数pに対して、2p-1-1 は、p2 で割り切れない。」
と類推したが、この類推は誤りである。
実は、素数 p=1093 に対して、2p-1-1 は、p2 で割り切れるらしい。
(→ WolframAlpha 先生に問い合わせても、返事が返ってこない。誰か確認をお願いします)
Dengan kesaktian Indukmu さんからのコメントです。(令和3年11月20日付け)
「1093」と「3511」とは、それぞれ Wieferich 素数ですね。 この他に Wieferich素数 があるか
どうか知られていないようです。
以下の《1》では実際に割ったときの商が記載されています。また《2》では電卓程度の計算
能力があれば実際に割りきれることを確認する方法が記載されています。
《1》Wieferich 商を計算する : tsujimotterのノートブック
《2》1093と3511について : INTEGERS
(コメント) フェルマーの小定理から、奇素数 p に対して、 2p-1≡1 (mod p) がいつ
も成り立ちますが、これを拡張して、 2p-1≡1 (mod p2) が成り立つ素数の
ことを、Wieferich素数と言うそうです。現在、p=1093、3511 のみが知られ
ているんですね。Dengan kesaktian Indukmu さん、貴重な情報をありがとうござい
ます。
at さんからのコメントです。(令和3年11月20日付け)
p=1093 のとき、 2(p-1)/6≡1 (mod p2) であることが容易に確認できます。
(コメント) 実際に、p=1093 のとき、 p2=1194649 で、WolframAlpha 先生に問い
合わせたところ、
2(p-1)/6=2182
=6129982163463555433433388108601236734474956488734408704
=5131199342621603026021356991552528595826017925544×1194649+1194648
より、 2(p-1)/6=2182≡-1 (mod p2)
よって、両辺を6乗して、 2p-1≡(-1)6=1 (mod p2) となり、p=1093のとき
成り立つことが示された。
ようやく、合点できました!at さんに感謝します。
GAI さんからのコメントです。(令和3年11月21日付け)
Wieferich の定理(1909年)が発表され、その内容は、
もし、フェルマーの式 x^p+y^p=z^p (x,y,z,pは自然数) に、x、y、z のどれも割り切らないよう
な奇素数 p が存在するなら、
2^(p-1)-1≡0 (mod p^2)
が成立する。(具体的なpの値はわからぬまま)
その後、この p が、
1913年 Meissner が、p=1093
1922年 Beeger が、p=3511
を具体的に見つけた、の記事を目にする。
確かに当時の計算機の道具がないとき、2^1092 的大きな数の範囲までチェックしていく
ことは大変なことであると思われます。(逆によく見つけられたものだ。)
この定理は、フェルマーの小定理で、任意の素数 p とそれと互いに素である整数 a で、
a^(p-1)≡1 (mod p)
は成立し、これは、 a^(p-1)-1が p で割り切れることを示し、 q=(a^(p-1)-1)/p は整数で
(フェルマー商)、この商 q が、さらに、p で割り切れることがあるか?
つまり、 a^(p-1)-1≡0 (mod p^2) が成り立つであろうか?の問いである。
そこで、この定理が主張していることは、これは後に具体的数が判明し、p=1093、3511で
は、ある自然数(x,y,z)の組ではx^p+y^p=z^pが起こるかもよ。しかし、それ以外では決して起
こりっこありません、と理解していいものなんですか?
実例6
n=1 について、991n2+1=992 は、平方数でない。
n=2 について、991n2+1=3965 は、平方数でない。
n=3 について、991n2+1=8920 は、平方数でない。
n=4 について、991n2+1=15857 は、平方数でない。
n=5 について、991n2+1=24776 は、平方数でない。
n=6 について、991n2+1=35677 は、平方数でない。
n=7 について、991n2+1=48560 は、平方数でない。
n=8 について、991n2+1=63425 は、平方数でない。
n=9 について、991n2+1=80272 は、平方数でない。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
もう、どんなに試算しても平方数が見つからないので、見切りをつけて、
「全ての自然数nに対して、991n2+1 は平方数でない。」
と類推したが、この類推は誤りである。
実際に、n=12055735790331359447442538767 のとき、991n2+1 は平方
数になるらしい。
「数学ツール」様のお世話になって計算したところ、
991n2+1
=991*145340765446276487999885076246978166471414204258297880289+1
=144032698557259999607886110560755362973171476419973199366400
=(379516400906811930638014896080)2
となりそう...。
(→ WolframAlpha 先生に問い合わせても、返事が返ってこない。誰か確認をお願いします)
GAI さんからのコメントです。(令和3年11月21日付け)
gp > s=12055735790331359447442538767;
gp > issquare(991*s^2+1)
%55 = 1
gp > s=12055735790331359447442538766;
gp > issquare(991*s^2+1)
%57 = 0
gp > s=12055735790331359447442538768;
gp > issquare(991*s^2+1)
%59 = 0
確かに、s=12055735790331359447442538767 では、991*s^2+1 は、平方数になります。
H.Nakao さんからのコメントです。(令和3年11月21日付け)
n=12055735790331359447442538767 のとき、
991n2+1=(379516400906811930638014896080)2 です。(→ 参考:「ペル方程式」)
(コメント) GAI さん、H.Nakao さん、ご確認いただきありがとうございます。
Dengan kesaktian Indukmu さんからのコメントです。(令和3年11月21日付け)
991n2+1
= 991*145340765446276487999885076246978166471414204258297880289+1
= 144032698557259999607886110560755362973171476419973199366400
= (379516400906811907843364487168)^2 となり、正しく計算されていないようだ。
最後の開平計算のみ、うまくいっていないのですね、不思議なバグです。
(→ サイトにてバグ再現)
桁数が多いために sqrt 関数が誤作動しているのかと思いきや、 その一方で下記計算で
は sqrt 関数が正しく計算されているようです。
式 sqrt(144032698557259999607886110560755362973171476419973199366400)
-(2^4*5*31*1093*140527*100271*1516049*6554059) = 0
(→ サイトにて確認)
おかしなことがあるものですね……。
らすかるさんからのコメントです。(令和3年11月22日付け)
桁数が多くて、下位桁が切り捨てられてしまっているだけだと思います。実際、16進で表す
と、平方根の正しい値は、
4CA489BE5DA2D94BB4B0A57D0
正しくない方の値は、
4CA489BE5DA2D800000000000
です。有効桁が53ビット(倍精度浮動小数点で一般的な桁数)なのでしょう。
式 sqrt(144032698557259999607886110560755362973171476419973199366400)
-(2^4*5*31*1093*140527*100271*1516049*6554059) = 0
これは、後半も同じ値に切り捨てられていて、0になっているものと思います。
実際、
sqrt(144032698557259999607886110560755362973171476419973199366400)
-379516400906811907843364487168 = 0
sqrt(144032698557259999607886110560755362973171476419973199366400)
-379516400906811930638014896080 = 0
となりますので明らかに切り捨てられていますね。
379516400906811930638014896080-379516400906811907843364487168
などは正しく計算されますので、おそらくsqrtが出てきたところで倍精度に限定しているので
はないかと思います。
(コメント) Dengan kesaktian Indukmu さん、らすかるさん、ご教示ありがとうございます。
おかげさまで、上記の計算
991n2+1
=991*145340765446276487999885076246978166471414204258297880289+1
=144032698557259999607886110560755362973171476419973199366400
=(379516400906811930638014896080)2
は修正確認済みとさせていただきます。
Dengan kesaktian Indukmu さんからのコメントです。(令和3年11月22日付け)
らすかるさん、検証を有り難うございます。
■1:開平を行いたいときには、結果の型を「実数」ではなく「式」にするようにパラメーターを
設定すると、倍精度計算を抑制できるのかもしれません。(想像)
(間違い)
結果の型が実数 の場合:
sqrt(144032698557259999607886110560755362973171476419973199366400)
= 379516400906811907843364487168
(正しい)
結果の型が式 の場合:
sqrt(144032698557259999607886110560755362973171476419973199366400)
= 379516400906811930638014896080
いづれにせよ、バグなので、当該サイトの管理者さんに連絡をとりたいのですが、メアドな
どの表示が見当たりません……。
GAI さんからのコメントです。(令和3年11月22日付け)
サイトのURLから、サイト管理者様への問い合わせが出来るようです。
Dengan kesaktian Indukmu さんからのコメントです。(令和3年11月22日付け)
GAI さん、有り難うございました。素因数分解も不出来ですので、あわせて報告いたしま
す。
Dengan kesaktian Indukmu さんからのコメントです。(令和3年11月30日付け)
2 件の issue を報告しましたが、うち、 1 件、素因数分解の不出来についての修正完了に
ついて連絡が来ました。 私も confirm しました。
もう 1 件のほう、すなわち、 sqrt 関数に食わせる数が大きいときに、「結果の型」が「式」
のときには正しく計算するのに、「結果の型」が「実数」のときには、倍精度の問題で期待さ
れる結果を返さない issue については、まだ返答を得られていません。
※「結果の型」が「式」のときには、sqrt(n)に食わせる n が完全平方のときには、きちんと
平方根を自然数で返します。 n が完全平方でないときには "sqrt(n)"をそのまま返してき
ます。 恐らくこれは、「結果の型」が「式」のときの仕様です。
一方、「結果の型」が「実数」のときには、 n が完全平方であるかないかに関わらず、
sqrt(n) を倍精度で計算した結果を返してきます。これも仕様なのだと思います。
これを直すのは難しいのかもしれません。
例えば、完全平方のときのみ倍精度計算をやめる、ということにすると、他におかしな現
象が登場するのかも… と思われます。例えば、sqrt(m^2-1)=sqrt(m^2+1)<sqrt(m^2) のよ
うな。
いずれにせよ返答待ちです。
追伸:issue についての報告は 英語で。メアドとして、「support@numberempire.com」を使うと
良いようです。
サイトにある報告用 FORM 画面からの日本語での訴えには、音沙汰がありませんでした
ので、 ググって 別のサイトのブログのコメント欄から 上記のサポート用のメアドを見つけま
した。
(コメント) Dengan kesaktian Indukmu さん、ありがとうございます。
以下、工事中!