流れる空の中で数学を。

とある数学好きの「手作りすうがく」と「気ままな雑記」。

p+q=rのとき、√p+√q≡√r mod nを満たすnについて

問題

p,q,r\lt n素数とする。p+q=rのとき、\sqrt{p}+\sqrt{q}\equiv \sqrt{r} (\mod n)を満たすnp,q,r\le 300の場合に探索した。

プログラムは過去記事参照のこと、

 

sky-time-math.hatenablog.jp

\sqrt{2}+\sqrt{3}\equiv\sqrt{5} (\mod 2)

\sqrt{2}+\sqrt{17}\equiv\sqrt{19} (\mod 34)

\sqrt{2}+\sqrt{41}\equiv\sqrt{43} (\mod 82)

\sqrt{2}+\sqrt{71}\equiv\sqrt{73} (\mod 142)

\sqrt{2}+\sqrt{137}\equiv\sqrt{139} (\mod 274)

\sqrt{2}+\sqrt{191}\equiv\sqrt{193} (\mod 382)

\sqrt{2}+\sqrt{239}\equiv\sqrt{241} (\mod 478)

\sqrt{2}+\sqrt{281}\equiv\sqrt{283} (\mod 562)

 

予想

p\lt q,r \lt n素数とする。p+q=rのとき、\sqrt{p}+\sqrt{q}\equiv \sqrt{r} (\mod n)を満たすnが存在するための必要条件は、

p=2,n=2q

である。

証明できた方、証明を知っている方がいたら教えていただきたいです。

√p+√q≡√r(mod n)となるようなモジュロ演算

p,q,r素数としたときのルート和

p,q,r素数とする。このとき、

\sqrt{p}は、自然数nを法として、方程式

x^2=p(\mod n)

の解が存在すれば、ちょうど2つ存在する。このとき、\sqrt{p} (\mod n)などと書くことにする。

与えられた素数p,q,rに対して、

\sqrt{p}+\sqrt{q}\equiv\sqrt{r} (\mod n)

を満たすnは存在するかという問題が自然と思いつく。

 

\sqrt{2}+\sqrt{3}\equiv \sqrt{5} (mod n)の場合

これを満たす自然数nは、n\le10^5まで探索したが、n=2以外見つからなかった。そこで、次のことが予想される。

 

\sqrt{2},\sqrt{3},\sqrt{5}(\mod n)1\sim nに存在するとき、

方程式\sqrt{2}+\sqrt{3}\equiv \sqrt{5} (\mod n)は、n=2以外の解を持たない。

 

このことを証明できる方がいたら、または証明を知っている方がいたら、ぜひ教えていただきたいです。

\sqrt{p}+\sqrt{q}\equiv \sqrt{r} (mod n)のその他の場合

p,q,r\le 23かつ 5 \le n \le 50という条件の下で、探索すると、

\sqrt{2}+\sqrt{17}\equiv28+17\equiv 11 \equiv \sqrt{19} (\mod 34)

などの興味深い例が見つかった。つまり、p,q,r\lt nでかつp+q=rのとき、\sqrt{p}+\sqrt{q}\equiv\sqrt{r}(\mod n)が成り立つことがあるのだ。

 

一般化と予想

p,q,r\lt nのとき、\sqrt{p}+\sqrt{q}\equiv\sqrt{r}(\mod n)が成り立つnは高々一通り存在する。

 

p,q,r\lt nでかつp+q=rのとき、\sqrt{p}+\sqrt{q}\equiv\sqrt{r}(\mod n)となるnが存在するような、p,q,rの組は無限に存在する。

 

これらの予想も証明できた方がいたら、または証明を知っている方がいたら教えていただきたい。

 

プログラム

最後にプログラムを貼っておく。

github.com

\sqrt{2}+\sqrt{3}\equiv\sqrt{5} (\mod n)の探索プログラム

gistcf6380eb0e14ea40c0cf2590354c6e54

 

\sqrt{p}+\sqrt{q}\equiv\sqrt{r} (\mod n)の探索プログラム

gist5030365ec757985acb76d8e1b14f0a79

【考察・解釈】水野あつさんの「たいたいな」【私的数学が捗る曲】

Amazon.co.jp: Yoshiki Ueoka:作品一覧、著者略歴

数学関連の絶版本・品切れ本をコチラから購入できます!

数学が捗りそうな僕の推し曲

僕の好きな「水野あつ」さんの曲で数学が捗りそうな曲を紹介したい。「たいたいな」だ。

www.youtube.com

数学が捗る曲チョイスで大切なのは、音楽のリズムとテンポ、そしてよく音楽と調和のとれた歌声だ。歌詞は自分が共感できるフレーズがはいっていると聴いてて落ち着くのでいい。

他にもおすすめ曲はたくさんある。例えば、「ろん」さんの歌ってる「40mP」さんの「トリノコシティ」などだ。

www.youtube.com

「たいたいな」の個人的な考察・解釈

たいたいなの曲の考察・解釈が調べてもすぐに出てこなかったので、この曲が好きなので考察・解釈してみようと思う。

以下、歌詞引用と数式番号の代わりの歌詞番号

--------------------------------------------------------------------------------------------

【歌詞】

 

最低な僕だな、君に会いたいんだ

夜中独り未来(あす)を考えてるんだ

最低な僕だな、君を守れないね

苦しいんだ……①

 

最低な僕がさ、考えているのは

どうして僕は無価値なの……②

 

そんな事ばかりで……③

 

単純な自分に嫌気が刺している

悲しいね……④

 

そしてだんだんだんだん嫌いになってく

僕も君もいつかは老いぼれて死ぬんだろ

だんだんだんだん嫌いになってく

僕は君とたいたいたいな……⑤

 

最低な僕だな、君に会いたいんだ

夜中独り未来(あす)を考えてるんだ

最低な僕だな、君を守れないね

苦しいんだ……①'

 

最低な僕がさ、考えているのは

どうしてヒトは生きてるの……②'

 

そんな事ばかりで……③'

 

単純な自分に嫌気が刺している

悲しいね……④'

 

そしてだんだんだんだん嫌いになってく

僕も君もいつかは老いぼれて死ぬんだろ

だんだんだんだん嫌いになってく

僕は君とたいたいたいな……⑤'

--------------------------------------------------------------------------------------------

この曲の歌詞の1番(①~⑤)と2番(①'~⑤')は、基本的にほとんど歌詞は同じで、違いは②と②'の部分

--------------------------------------------------------------------------------------------

最低な僕がさ、考えているのは

どうして僕は無価値なの……②

 

最低な僕がさ、考えているのは

どうしてヒトは生きてるの……②'

--------------------------------------------------------------------------------------------

だけだ。この違いは、曲が進むにつれて「僕」の考えが歌詞にある通りだんだん深まっていっていることを意味していると考えられる。

 

それでは、①から順に考察していこう。

--------------------------------------------------------------------------------------------

最低な僕だな、君に会いたいんだ

夜中独り未来(あす)を考えてるんだ

最低な僕だな、君を守れないね

苦しいんだ……①

--------------------------------------------------------------------------------------------

まず「僕」は自分自身を最低だと評価している、時間帯は夜で独りぼっちで自分自身について考え耽っていることがわかる。未来と書いて「あす」と歌っていることから、この僕にとって遠い未来を思い描くことすら困難で、明日を生きるので精いっぱいだと思われる。

そして、君を守ることができない、そんな自分自身が最低だと考えている。このことから「君も」苦しんでいることがわかる、それが精神的なものか物質的なものかは推し量れないが、後の歌詞からおそらく精神的なものだと思われる。

この悩みで、「僕」は苦しんでいるし、おそらく「君」も苦しんでいる。だから、守れないという言葉が出てくる。「僕」にとって、君は守り「たい」存在だと主張している。

 

次に②に移ろう。

--------------------------------------------------------------------------------------------

最低な僕がさ、考えているのは

どうして僕は無価値なの……②

--------------------------------------------------------------------------------------------

ここで、考え悩んでいる内容が具体的に示される。どうして僕は無価値なのか。疑問符がついていないことから、すでに自分自身が無価値であると考えていて、その状況を嘆いている。①から、わかるように、「君」も苦しんでいることから、この悩みは「君」からもたらされたものだと考えられる。「君」から無価値だと直接または間接的に言われた

かそう考えざるを得ない状況に追い込まれたと予想される。この時点では、まだ「君」を守れないという現状を変えられない自分自身に価値がないと自分個人のことを考えているのだ。

 

次に、③~⑤

--------------------------------------------------------------------------------------------

そんな事ばかりで……③

 

単純な自分に嫌気が刺している

悲しいね……④

 

そしてだんだんだんだん嫌いになってく

僕も君もいつかは老いぼれて死ぬんだろ

だんだんだんだん嫌いになってく

僕は君とたいたいたいな……⑤

--------------------------------------------------------------------------------------------

③は考えが同じところを堂々巡りして、一向に前に進まないこと。

④に単純な自分と出てくるが、これは「君」を苦しみから守れない方法「さえ」見つけられれないことを意味している。ここで、「僕」にとって、「君」が大切な存在であることが改めて強調されている。「君」が誰よりも大切に思っていることは間違いないと確信しているからこそ、守る方法が見つけられないことに矛盾を感じて、自分が「単純」な存在に過ぎないからだ。単純がゆえに、無価値だと考えている。

⑤でだんだん嫌いになっていくのは、ここまでの歌詞からわかるように、「僕」自身だ。ここで、明日のことしか考えられなかった「僕」が「僕も君もいつかは老いぼれて死ぬんだろ」と遠い未来のことを言いだすのは、一見矛盾している。つまり、この言葉は、おそらく「僕」からでた言葉ではなく、表現の形は変わるかもしれないが「君」または「君の状況」から考えることとなった言葉だと思われる。つまり、「君」はなんらかの事情で「死」を意識して生きている。そして、おそらく「僕」に「いつかは死ぬんだよ」と言ったと思われる。つまり、自分自身が無価値だと考え始めたのは、「僕」ではなくて、「君」だと予想される。「ヒトはいつか死ぬから人生に意味はない」と「君」は考えている。「君」がこんなことを考えだしたのは、何かきっかけがあったのだろう。おそらく「君」にとって、身近な誰かの「死」などの不幸なことかかなり辛いことがあり、精神的に追い込まれた結果でた言葉だと思われる。

そして、そんな「君」を守れないから「僕」は自分自身をだんだん嫌いになっていくが、それでもまだ「君」の存在は「僕」にとって、大切で、「君と僕」で一緒に「~したい、~したい」といろいろなしたいことがたくさんあるんだと言っている。しかし、この~したいという言葉でも君を守れないということは、「僕」の「~したいという気持ち」を「君」が受け入れてくれない心情でいるからだということになる。つまり、いつか死ぬその日までしたいことはたくさんあると伝えているのに、それを「君」は否定している。つまり、「君」は生き続けることを表面上は否定する言葉を「僕」に投げかけていたと思われる。すなわち、「君」は生きる意味を見失ってしまったのだろう。夢か大切な人か何を失ったかはわからないが、「僕」にはそれをどうにかできるだけの答えがないのだ。

 

そして、2番へ続く。①'は1番と同じで、「僕」が考え悩んでいる。しかし、一番と決定的に違うのは続く②’での問いが「どうしてヒトは生きているの」とより一般的なものになっている点だ。

--------------------------------------------------------------------------------------------

最低な僕がさ、考えているのは

どうしてヒトは生きてるの……②'

--------------------------------------------------------------------------------------------

これは、「君」の悩みに真剣に向き合い続けた結果、「僕」も同じ悩み・苦しみを抱えるようになって、前よりずっと「君」によりそって悩んでいることを表している。

③④は1番と同じ解釈で、⑤は「君」の悩み・苦しみがついには「僕」自身の悩みとなっても、まだ一緒に生きてしたいことがたくさんあるという気持ちが消えいていないということを歌っている。そして、その気持ちを伝えきれないことで、「君」を救えないことで、だんだん自己嫌悪に陥っていく。頭(理屈)では「生きていく理由」を説明できないけど、「君」と一緒に生きたいと考えいている。頭では生きる理由を否定して矛盾しているとわかっていても、「生きて」したいことがたくさんあるという気持ちだけは確かにあるんだと変わらない気持ちを伝えて終わる。「君」を生きる苦しみから守るだけの言葉を紡げないけど、「僕」と「君」で一緒に生きていろんなことをしたいという純粋で単純な気持ちだけは確かにそこにあるのだ。

 

 

【Python】5000×5000直交行列の対角化【線形代数】

巨大なランダム直交行列

各成分が[-1/2,1/2]の一様乱数で決定される5000×5000行列を近似的に対角化してみた。

手法

規格化したベクトルを用意し、各成分がe^{i\theta}という位相だけを持つとして、\thetaモンテカルロ法により最適化し、対角化を行った。

プログラム

github.com

gistc1a016e8bd86d10e898655f2ac6a979f

結果

行列が大きくなると、適当に作った固有ベクトルでも、偶然固有ベクトルに一致する個数の期待値が上がる。そのため、今回のようなかなり雑な近似でも良い結果が得られる。

固有ベクトルの誤差の期待値は、\frac{|Av/||Av||-v|}{5000}\approx 0.0181で、平均の直交すべきベクトルの内積の値は、5.0967\times10^{-6}であった。肝心の計算時間は、対角化自体は12秒。誤差のチェックに1分40秒、直交性のチェックに5分25秒で、残りの下準備の計算時間も合わせて、合計7分48秒となった。

 

【Python】確率的素数生成プログラム【改良版】

バグがありました

sky-time-math.hatenablog.jp

素数が見つからないときは、取り合えず2を足す作戦に変更

ついでに、sympy.isprime()で素数判定する作戦に変更。プログラムは以下においてあります。

github.com

進捗バー表示は以下のサイトを参考にした。

qiita.com

素数2,3,5だけから始めて、200個の素数を生成するテスト。prodの積の最大値は5、その各場合につき、乱数は1つの素数につき、100パターン取っている。

gist02db7518e164c1786a5adcb24fbc4f05

ある素数の次の素数を見つける確率99.01%。素数を見つける確率99.51%。

素数2,3,5だけから始めて、1万個の素数を生成するテスト。prodの積の最大値は10、その各場合につき、乱数は1つの素数につき、100パターン取っている。

gist6a1bd58014cb3df8b65e40ad4578de35

ある素数の次の素数を見つける確率99.02%。素数を見つける確率99.99%。しかし、28分もかかってしまった。

次にすべきこと

上記のプログラムでは素数生成時に、それまでに生成した素数全てを用いている。それを減らして、例えば100個の素数から生成し直した場合どうなるかなど調べた。1万個の素数を生成するテスト。prodの積の最大値は10、その各場合につき、乱数は1つの素数につき、100パターン取っている。この計算には、1分50秒で済んだ。

gist40988ad27e18a3c3148b3d71601ab7f0

ある素数の次の素数を見つける確率98.97%。素数を見つける確率99.99%とかなりの好成績を収めてくれた。

まとめ

確率的素数生成プログラムとしては、ある程度の水準のものができたように思う。これ以上改良するには、最初に用意する素数を増やすなどの手を打つ必要があるだろう。どれくらいの大きさの素数に対して、いくつ素数を事前に用意すればよいか、素数を選ぶ重みづけなど、いくつか課題は残っている。

 

 

 

 

 

 

【素数】確率的素数生成【Python】

n番目の素数p_nが与えられた時、n+1番目の素数p_{n+1}を予測する。

アルゴリズムのアイデアは前回の記事と同様なので、それを貼り付けておく。

 

sky-time-math.hatenablog.jp

コード

パラメータの調整でどこまで成功確率が上がるかわからないが、ひとまず素数2,3,5を出発点として、確率的に100個素数を生成して、どれくらい正しい素数が含まれていて、次の素数を正しく計算できる確率を算出してみた。

確率的アルゴリズムのため、比較的うまくいった結果をとりあえず載せてみる。

github.com

gist6e61390f695c422cab264792f36581d4

このように約41%の確率で素数判定に成功しを、素数から次の素数を見つける確率は約40%である。最高で、49%付近までいったこともあるが、うまくいかないときは、35%程度である。

素数2~29を出発点として、確率的に素数を生成した場合の結果は次のように、いい時で50%付近まで改善された。元になる素数の情報が多いので当然の結果である。

gist5c4b2d564f917487dbb11a65163ed002

 

 

 

【素数判定】分解に基づく素数判定の劇的改良(99.58%)【Python】

前回の反省点

前回の記事では、判定成功率55%程度とあまりぱっとしなかった。

 

sky-time-math.hatenablog.jp

 

そこで、少し悩んだ結果、明らかに2,3,5,7などで割れるのは合成数だという情報を使っていなかったことに気づいた。また、プログラムのフローに問題があったので修正した。

修正版

github.com

gist388a80711e815a542ee7cb6bd9525809

1~1万までの自然数に対して試した結果、なんと判定成功率99.58%となった。素数だけの判定成功率は脅威の100%だった。なお、乱数による分割は書く自然数に対して、100回ずつ行っている。

f:id:FoxQ:20210919084320p:plain

自然数の素因数の種類数

追記

2,3,5,7の倍数をサンプルから除いた場合の素数判定成功率も調べた。

gist1610dbf28d8e1fe3b3016b3561d329d4

2,3,5,7の倍数をサンプルから除いた場合の判定成功率は約99%で、素数を正しく素数と判定できる確率は100%であった。