数学

x^2 + 3y^2 = 5316666001を解いてみる。

フェルマーによると、3で割ると1余る素数は

x^2 + 3y^2

(ただしx, yは整数)と表すことができるそうな。

というわけで、先日見つけた素数

5316666001

は 3n+1型なので、そのように表せるわけですが トリビアルなやりかた(1から順番に探していく)方法だと、結構大変。特に素数がでかくなると、計算量が半端ないようで。

答え分かりますか?

72151^2 + 3*6080^2 = 5316666001

まずは x^2 + 3 = 0 (mod p)なる xを探すところから始まるわけですが、 特定の型ではうまく言っても、一般的にとなるとこれが結構しんどかった。

原始根の指数との対応が求まれば簡単に計算できるのだけど、指数を求めるのは 計算として難しいと言われていること(DH鍵交換はこれが計算するのが難しいという 大前提で成立している)

散々悩んだ末、p-1の素因数の和くらいのオーダで計算ができるようになりました。 p-1が大きな素因数を持っていないなら、これなら100桁くらいでも大丈夫でしょう。

こういうのを考え始めるとキリがないなぁ。楕円関数使うともっと効率よさそうなのがありそうだけど、考えるのが面倒なのでペンディング。

なお4n+1型の2つの平方の和で表すほうはとても簡単に求まります。ハイ

追記)
確率的アルゴリズムを用いればp-1の素因数が大きくても問題ないです。詳しくは関連を

Posted by issei

カテゴリ: 数学

コミックマーケット78 15(日) 東P-25a

1.5年ぶり。

今回は3日目の東館。 蒸し暑そうだな。。。

まだ2週間以上もあるけれど、昨日帰宅後頑張り、とりあえず本らしきもの(第1稿)が出来たので、多分出展は間違いないでしょう。ということでアナウンス。

内容は

「正65537角形作図法」

こちらのエントリを詳しくまとめたものです。結果はもちろん、導出方法の解説をも載せています。ちなみに、全部の式を載せると300ページを越えますが、幸い式は規則的なので頑張って圧縮。24ページに納めました。

今までの流れにのっとり一冊300円くらい売ります。

なお、自分軟弱なんで在庫が捌けたら撤収すw お求めはお早めに。
Posted by issei

カテゴリ: 数学

麻雀の対局の問題

16人でマージャン大会をすることになりました。 (基本事項だと思いますがマージャンは4人でします)

誰もが他の人と(少なくとも一回は)卓を囲むとすれば最低何局必要 でしょうか?(どのように大局を組めばよいでしょう?)

なお、捕捉しますと Aさんが B,C,Dさんと試合すれば、B,C,Dさんについてはクリアしたことになります。 (つまり A,B,C,Eのような試合をしなくてもよい)

前mixiかどっかに書いたような気もするけど、再掲。

Aさんにしてみれば、自分以外の人は15人いるわけですから、3人づつ相手を入れ換えていけば、Aさんは最低5局しなければならないのはすぐわかると思います。 うまい組合せを考えて、BさんCさんDさん...も5局でおさまる...ようなものはあるでしょうか?

なお卓は4つあり、4試合同時進行が可能です。 出来る限り同時進行をして早く終らせたいというのもあります。

ヒント

答えは各人が5局(のべ20局)になります。しかも4卓同時進行できる すばらしい組合せがあります。

これは組合せを力技で考えても解けないでしょう。 GF(4)の体を考えないと解けない。体をしらなくてもCRCを知ってれば解けるかも。
Posted by issei

カテゴリ: 数学

正15角形

agif
次回のコミケのネタは正65537角形作図法にしようかなと。 マニアックすぎるかなぁ?w

ということで、まずはネタフリ。

今回は正15角形。

定規とコンパスだけで作図可能な素数の正多角形は 3, 5, 17, 257, 65537です。それより大きい作図可能な正多角形が あるのかどうかは分かっていません。

そしてそれらの数を掛け合わせた数もまた作図可能です。 ただし1つの数は1回しか使えない。つまり、正9角形は作図できないけど、 正15角形は作図可能なのです。その理論でいえば作図できる最小の奇数の正多角形は 4294967295角形ということになりますね。

で、やり方ですが、正三角形と正五角形が作図できる人なら結構簡単です。 実際、正三角形と正五角形が正15角形には含まれるので、図の X5とX6が正15角形の弧になるから、これをもとに円を区切っていけばokです。

それで解決といえば解決なのですが、しかしまた、 以前にも書いたように、これは方程式、

x15-1=0 --(1)

の根と関係があります。それはガウス平面に書けば、半径1の円上の点を15等分した点になります。

「定規とコンパスで作図が出来る」ということは 「方程式の係数からはじめて、平方根と加減乗除を繰り返すだけで解が求まる」 ということと同値。

故に(1)が方程式として解けることに他なりません。 そこで今回はこれをといてみようかなと。

まず(1)式を因数分解。 自明な解1があるから、(x-1)で因数分解できるのはガチ。

残りですが、 3乗根および5乗根もまた根になることがわかっているので (x2+x+1)および (x4+x3+x2+x+1) で因数分解できます。 計算してみると

x15-1=(x-1)(x2+x+1)(x4+x3+x2+x+1)(x8-x7+x5-x4+x3-x+1) となります。この4項目の8次方程式

x8-x7+x5-x4+x3-x+1 --(2)

が解けてしまうのです。どうみても解けそうにないこの式が解けてしまうというのは なんとも不思議です。この式の8根は、ガウス平面状のX1, X2, X4, X7, X8, X11, X13, X14になるのはわかっています。つまり

(2)=(x-X1)(x-X2)(x-X4)(x-X7)(x-X8)(x-X11)(x-X13)(x-X14)

右辺を展開すれば

x8-(X1+X2+X4+X7+X8+X11+X13+X14)x7 +...+X1X2X4X7X8X11X13X14

だから(2)式とx7の項と定数項の係数を比較すれば

X1+X2+X4+X7+X8+X11+X13+X14=1

X1X2X4X7X8X11X13X14=1

となります。

ここでちょっと中断して基本事項の確認。

X5, X10は1の3乗根(つまりω)、すなわち x2 + x + 1の解だから、
また、X5 + X10 = -1。

X3, X6, X9, X12は1の5乗根、すなわち x4 + x3 + x2 + x + 1の解だから、全部足すとやはり-1。

これを踏まえて次のステップにいきます。

A0=X1+X2+X4+X8
A1=X7+X11+X13+X14

とすれば

A0 + A1 = 1

です。一方 A0A1を計算してみると

(X1 + X2 + X4 + X8)(X7 + X11 + X13 + X14)
=(X1 + X2 + X+4 + X+7 + X+8 + X11 + X13 + X14)+ (X3+X6+X9+X12)+4X15
=1 -1 + 4 =4

故にA0, A1は x2 - (A0+A1)x + A0A1、すなわち x2 - x + 1の根で



次に

B0 = X1 + X4
B1 = X2 + X8

とすれば

B0+B1 = A0

B0B1 = (X1+X4)(X2+X8) = X3 + X9 + X6 + X12 = -1

故に同様に計算すれば



最後に

X1 + X4 = B0
X1X4 = X5 = ω

だから



となります。これが解(の1つ。そして偏角が最小のもの)。式で書くと



根号の符号をどちらに取るかという問題があるけれど、正しく選択すればX1が見事に求まります。

なおgoogleで計算するとこうなります。→検算結果
Posted by issei

カテゴリ: 数学

2^n+1が素数になるとき

その必要条件は何か?という問題。

まずmod3で考えることにより

2^n+1 ≡ (-1)^n+1 (mod 3)

nが奇数のときは右辺は0になるので、必ず3で割り切れる。故に素数にはなりえない。 ということでnは偶数であることがいえます。

n = 2^(k * 奇数)

ならば

2^n + 1 = (2^k)^(奇数) + 1

となるので、mod 2^k+1で考えれば右辺は0になる。故に素数にはなりえない。 例えば2^12+1 = 4097は 16^3 + 1だから17で割り切れる。

ということで肩の指数は 2^kの形である必要があるわけです。 まぁつまりフェルマー数ということですな。

小さいほうから書いていけば

3, 5, 17, 257, 65537, 4294967297, ...

このうち素数なのは65537まで。その先に素数があるかどうかは 未解決問題。
Posted by issei

カテゴリ: 数学

山分けの問題

こういうタイトルでいいのかどうかわからないけれど、こういう問題す。

二人の盗賊が宝石の山の宝を盗み出した。追っ手が迫ってるので、 素早く納得いくように分けたい。秤など使わないで、平等に分ける方法はあるか?

答えとしては以下のようになります。

1)盗賊Aが宝を均等と思われるところで二つの山に分ける。

2)盗賊Bがその山のうち特だと思われるほうを先に選ぶ。

ここまでは有名。 この問題をn人に拡張できるのか?というのが最近考えています。

これが結構難題。

たぶん答えはあるんですが(ググるとそれらしきものにヒットするしね~) 解答を見たら負けということで。

もし話し合いというのを許すなら、4人の場合は次のようにすればよいでしょう。 1)A、BとC、Dのグループにわける。 2)A、B連合は相談して山を二つに分ける。 3)C、D連合は相談してどちらかの山を先に選ぶ。 4)あとは、それぞれの山を二人で先ほどのように分ければよい。 しかし話し合いをしているヒマすらないという場合も考えられますし、 そもそも決裂してしまったら意味がない。しかも3人の場合はどうするんだ? とか考えると、もっとよいやり方があるのかなぁ・・と 1)Aが3つに分ける。 2)Bが1つの山を選ぶ 3)Cがさらに1つの山を選ぶ。もし、B、Cが別の山を選べば、それで確定。 4)B、Cが同じ山を選んだとすれば、Aは残りの山のどちらかから1つ選ぶ。 5)残った2つの山を1つにまとめ、Bが再配分。先にCが選び、残りをBとする。 これでいいような気がするけど、ちょっと問題があるんですよねぇ。 100の宝石を分けるとき、Aが1,49,50と分けたとします。 B、Cが二人とも50を選ぶことはありません。Bが選んだあとCも50を選ぶとすると、Aは49を選ぶことになり、その結果B、Cは51を二人で分け合うことになるからです。これは損です。 よって、Cは49を選ぶしかない。つまり、このケースではBの選択権が強すぎて、 Cはどう転んでも最大利益の50を選ぶ権利がありません。 じゃぁ、B、Cが同じのを選択したときはCに権利があるとすると、 今度はCの選択権が強すぎてBはどう転んでも50を選べない。 よってこの方法では手詰まりです。 なんかもっとうまい方法はないですかねぇ?じゃんけんすれば一発という解答はなしの方向でw

Posted by issei

カテゴリ: 数学

mimetex

TeXの数式をそのままgifにしてくれるという mimetex

こんなものがあったのか。便利だのう。思わず沢山書いちゃうな。これは。







しかし昔とった杵柄というのは恐ろしいモノですね。悩まずにTeXで式が書けてしまうw
Posted by issei

カテゴリ: 数学

メルセンヌ数

世間一般には『メルセンヌ素数』の発見に興味があるようですが、 あえて素数ではないメルセンヌ数を素因数分解してみました。

?はそれ以上分解できるかもしれないやつ。

101で30分くらい。ちなみにリストにない137は結構強敵で、自分のアルゴリズムだとなかなか素因数をみつけられません。

2^11-1	23 * 89
2^23-1	47 * 178481
2^29-1	233 * 1103 * 2089
2^41-1	13367 * 164511353
2^43-1	431 * 9719 * 2099863
2^47-1	2351 * 4513 * 13264529
2^53-1	6361 * 69431 * 20394401
2^59-1	179951 * 3203431780337
2^67-1	193707721 * 761838257287
2^71-1	228479 * 48544121 * 212885833
2^73-1  439 * 2298041 * 21514198099633918969?
2^79-1	2687 * 202029703 * 224958284260258499201?
2^83-1	167 * 57912614113275649087721?
2^97-1	11447 * 13842607235828485645766393?
2^101-1	7432339208719 * 341117531003194129?
2^103-1	2550183799 * 3976656429941438590393?
2^109-1	745988807 * 870035986098720987332873?
2^113-1	3391 * 65993 * 23279 * 1868569 * 1066818132868207?
2^131-1	263 * 10350794431055162386718619237468234569?
Posted by issei

カテゴリ: 数学

ユークリッドの互除法

超有名な最大公約数を求めるアルゴリズム。 その理論はともかく、rubyで書くなら

def gcd(a, b)
  while true
    if a > b
      a %= b
      return b if a == 0
    else
      b %= a
      return a if b == 0
    end
  end
end


さらに短く
def gcd(a, b)
  while true
    if a > b
      return b if (a %= b) == 0
    else
      return a if (b %= a) == 0
    end
  end
end


大きい数で小さい数を割った値を求めても時間が余計にかかるだけで計算に影響はないだろうから、さらに短く。

def gcd(a, b)
  while true
    return b if (a %= b) == 0
    return a if (b %= a) == 0
  end
end


こんなもんですかね?Cなら

int gcd(int a, int b)
{
    while(1){
	if(!(a %= b))
	    return b;
	if(!(b %= a))
	    return a;
    }
}


それにしても紀元前にこのアルゴリズムを考えたユークリッドはすごいわ
Posted by issei

カテゴリ: 数学

眠れない夜に円分多項式 (一応その3)

2乗して1になる数は1と-1です。

では3乗して1になる数はなんでしょうか?これは

x^3 - 1 = 0

の根で、1つはもちろん1です。だから(x-1)で因数分解できて上の式は

(x-1)(x^2+x+1) = 0

となります。故に解の公式から x= (-1±√-3)/2 となります。
5乗して1になる数も同じで

(x-1)(x^4+x^3+x^2+x+1) = 0

を求めればよいことになります。x=1は解として面白みがないので、問題は2つめの括弧の

x^4+x^3+x^2+x+1 = 0

の根でありましょう。比較的簡単な考察により、その根は複素平面上に書くと、半径1の正n角形の頂点の位置に置かれることがわかります。よって、こんな式を円分多項式と呼びます。

円分多項式はどんなに次数が高くても、累乗根を有限回繰り返していくことで、解くことができることがガロア理論で説き明かされています。

たとえば、11乗して1になる数を求める円分多項式

F11(x) = x^10 + x^9 + x^8 + ... + x + 1 = 0

の根は10次の方程式ながら解けてしまうのです。

ガロア理論では5次以上の方程式に解の公式がないこともまた証明されているので、このような次数の高い方程式が解けてしまうのはまた実にフシギだなぁと思うわけです。

ちなみに解ける理由を一言でいうと、F11のガロア群、すなわち1の11乗根はZ/10Zに同型だから累乗根を数回繰り返すことで解ける。ということになりますがチンプンカンプンですね。

しかも、多くの数学の本では具体的な解き方というのが明かされていないのです。ということで具体的にこの方程式を解いてみる。というのがこのシリーズの主題です。前回はF7(x)を解きました。今回は7の次の素数である11にチャレンジです。


さて、

ξ=cos(2π/11)+isin(2π/11)

とおくと(iは虚数単位)ξは根の1つ。また残りの根は

ξ^2, ξ^3, ξ^4, ..., ξ^10

であるのは自明ですので、問題は、このξを四則演算と巾根だけで求めることになります。
それでは解法の始まり始まり~




B0 = ξ + ξ^4 + ξ^5 + ξ^9 + ξ^3
B1 = ξ^2 + ξ^8 + ξ^10 + ξ^7 + ξ^6

とおく。

ξ+ξ^2+...+ξ^10 = -1だから(F11にξを代入すれば明らか)、B0+B1 = -1。

B0において、ξ→ξ^2の置換を行うと、B0→B1となるだけである。その他の置換もB0とB1が入れ替わるか、そのまま変化ないかのどちらか。

故にガロア理論によりQを有理数の集合とすれば

{B0,B1の対称式}⊂ Q

であり、またその群は Z/2Zに同型。

A = B0-B1とおくと

A^2 = (B0-B1)^2

右辺は対称式だからA^2 ∈ Q
しかしA ∉ Qであり、かつ、根の置換によりAの符号が反転するからそのガロア群はZ/2Zに同型。故にAが最初の体の拡大である。実際に計算すると

A = ±√-11

となる。

B0+B1 = -1だから

B0 = (-1+A)/2 = (-1+√-11)/2
B1 = (-1-A)/2 = (-1-√-11)/2

となる。次に

C0 = ξ + σξ^4 + σ^2ξ^5 + σ^3ξ^9 + σ^4ξ^3
C1 = σξ + σ^2ξ^4 + σ^3ξ^5 + σ^4ξ^9 + ξ^3 = σC0
C2 = σ^2ξ + σ^3ξ^4 + σ^4ξ^5 + ξ^9 + σξ^3 = σ^2C0
C3 = σ^3ξ + σ^4ξ^4 + ξ^5 + σξ^9 + σ^2ξ^3 = σ^3C0
C4 = σ^4ξ + ξ^4 + σξ^5 + σ^2ξ^9 + σ^3ξ^3 = σ^4C0

を考える。ただしσは1の5乗根でσ^5 = 1。
C0において ξ→ξ^4と置換をすれば、 C0→C4。

他も同様で、置換によりC0はC1、C2、C3、C4に移るだけで、Z/5Zに同型。
よって

{C0,C1,...,C4の対称式}⊂ Q(√-11)

ところで

C0×C1×C2×C3×C4 は対称式だからこれはQ(√-11)の要素。

C0×C1×C2×C3×C4 = σ^10C0^5 = C0^5

より
C0^5 ∈ Q(√-11)

一方

C0∉Q(√-11)

故に次の体の拡大はC0である。

実際に計算すると

C0^5 = (50 - 39B0) + σ(55 + 15B0) + σ^2(20 + 55B0) + σ^3(-65 - 5B0) + σ^4(-75 - 25B0)

同様に

D0 = ξ + σ^2ξ^4 + σ^4ξ^5 + σξ^9 + σ^3ξ^3
E0 = ξ + σ^3ξ^4 + σξ^5 + σ^4ξ^9 + σ^2ξ^3
F0 = ξ + σ^4ξ^4 + σ^3ξ^5 + σ^2ξ^9 + σξ^3

を考え D0^5, E0^5, F0^5を計算すれば

D0^5 = (50 - 39B0) + σ^2(55 + 15B0) + σ^4(20 + 55B0) + σ(-65 - 5B0) + σ^3(-75 - 25B0)
E0^5 = (50 - 39B0) + σ^3(55 + 15B0) + σ(20 + 55B0) + σ^4(-65 - 5B0) + σ^2(-75 - 25B0)
F0^5 = (50 - 39B0) + σ^4(55 + 15B0) + σ^3(20 + 55B0) + σ^2(-65 - 5B0) + σ(-75 - 25B0)

これより C0, D0, E0, F0がQ(√-11)の元の5乗根として求まる。

ただし、C0, D0, E0, F0は五通りの根があるので、適切な値を選ぶ必要があることに注意しなければならない。もし適切に選べば、

ξ = (B0+C0+D0+E0+F0)/5

となる。これが求める解である。

実際に値を計算すると

B0 = -0.5+1.65831239517769992456i
C0^5 = -0.07391186360448942322+0.06560965162814661925i
D0^5 = 115.64373109541402075798-13.28754935455122644393i
E0^5 = 4.36439952334176258988-37.98408806642842193006i
F0^5 = 243.06578124484870607583-273.82320168547768345485i

これより、以下のように根を選べば

C0 = 0.55743011092335039488+0.29242249110475606105i
D0 = 2.58869179452016831776-0.05923911544732743834i
E0 = 0.04741376980466689331-2.07193567820477451282i
F0 = 1.51273198890772023836+2.88364399464763387615i

(B0+C0+D0+E0+F0)/5 = 0.84125353283118116886+0.54064081745559758212i

を得る。

補足) p次の円分多項式は p-1の素因分解と大きな関係があります。 今回はp=11なので 10 = 2 x 5 故に2乗根(平方根)を求め、5乗根を求めることで、根を求めることができました。 同じ原理で考えれば、もしp=13なら平方根2回と立方根を1回で解くことができます。 同様に、 p=17ならば平方根4回 p=19ならば平方根1回と立方根2回 p=23ならば平方根1回と11乗根1回 p=23のときは11乗根は11通りの選び方があり、その選択肢も多いのですが、これは実際に値を計算をしてと同じになるものを選ぶ以外の方法を知りません。昨今は三角関数などすぐ計算できるので、とりあえずそれで計算するのがよいかなぁと。 また、解くためには p-1の素因数の累乗根が必要ともなりますが、 p-1の素因数の累乗根は既知であるとしても何ら問題はありません。 (数学的帰納法で証明可) 一般に、奇素数pに対し、p-1は偶数ですから最初の拡大は必ず平方根にすることが可能です。 そしてこの平方根は必ず √pまたは√-pとなります。 もっと具体的に言えば、4n+1型の素数は√pに。4n-1型は√-pになります。 もしpが 2^(2^n) + 1型の素数であれば、平方根だけで根を求めることができます。 そのような数は 3, 5, 17, 257, 65537 です。平方根は定規とコンパスで作図可能なので、上記の正多角形は定規とコンパスだけで作図可能ということになります。 最後に数を並べる時ですが、これは原始根にそって並べます。 たとえば11の原始根は2ですので1から始めて2倍2倍で並べてゆくと(11を超えたら11を引く) 1, 2, 4, 8, 5, 10, 9, 7, 3, 6 といった列ができます。この列を1つおきに並べると 1, 4, 5, 9, 3 2, 8, 10, 7, 6 となります。これがB0,B1の正体です。 余談) C0, D0, E0, F0の選び方はそれぞれ5通りあります。したがって全体としてはで5^4 = 625通りの選び方があることになります。 C0の一つの解をηとすれば、他の4つの解はησ、ησ^2、ησ^3、ησ^4です。 D0, E0, F0も同様です。 ところで、 ξ^4 = (B0+σ^4C0+σ^3D0+σ^2E0+σ^1F0)/5 ξ^5 = (B0+σ^3C0+σ^1D0+σ^4E0+σ^2F0)/5 ξ^9 = (B0+σ^2C0+σ^4D0+σ^1E0+σ^3F0)/5 ξ^3 = (B0+σ^1C0+σ^2D0+σ^3E0+σ^4F0)/5 です。 したがって625通りの組み合わせの中にξ,ξ^4,ξ^5,ξ^9,ξ^3が現れることになります。 すなわち625通り中、5通りだけが 11乗根の解を与えることになります。 試しにその625通りの根を複素平面上に図示してみました。 正五角形の頂点が根の候補で、赤い○をつけたところが11乗根(の半数)です。 角頂点は4個の正五角形の頂点となっています。図では一番小さい五角形の頂点を線で結んでみました。 なんとも意味深な模様ではないでしょうか?

11乗根

Posted by issei

カテゴリ: 数学