30
ププププププププ プププ 2016.10.05 ププ ププ ププププププププププププププププ ~~

プログラミングで数を楽しむ:)

Embed Size (px)

Citation preview

Page 1: プログラミングで数を楽しむ:)

プログラミングで数を楽しむ

2016.10.05 近藤 祥子

~数学者のためのプログラム勉強会~

Page 2: プログラミングで数を楽しむ:)

ABOUT ME

▸ Hackers Bar(ハッカー・週 1)▸ XTREME DESIGN(技術秘書 )▸ ダイヤモンドメディア (エンジニア )

▸ 元・証券会社 (エンジニア )▸ 元・ソシャゲ会社 (エンジニア )

▸ @shoko3168▸ fb.com/shoko3168

六本木のバー

依頼主 プロジェクター

Page 3: プログラミングで数を楽しむ:)

まず遊んでみましょう

Page 4: プログラミングで数を楽しむ:)

例題 1.より起きやすい事象はどっち?

Page 5: プログラミングで数を楽しむ:)

百万回のコイン投げ

Q. コイン (※) を1000000 回投げたとき , 表が出る

回数がちょうど500000 回である確率と ,

495000 回以下である確率とではどちらが大きい

か , また , 大きいほうは小さいほうの何倍ほどか .

※ 表が出る確率も裏が出る確率も 1/2 のコイン

岩沢宏和 . " 確率パズルの迷宮 ". 日本評論社 , 2014, p.14

Page 6: プログラミングで数を楽しむ:)

ルールの確認

▸ コインを 1 回投げます

▸ 表だったら 1 カウント

▸ 100 万回投げた後、カウントはいく

つ?

正解発表します

▸ A. 「 500000 回表が出る」の方が発生しやすい

▸ B. 「表が 495000 回以下」の方が発生しやすい

▸ C. ちょうど同じ位

Page 7: プログラミングで数を楽しむ:)

正解は

▸ A. ちょうど 500000 回表が出る方が、はるかに起きやすい

▸ 更に、 B. 495000 回以下と比べると

天文学的に (1020 倍ほど ) 大きい確率

> 495000回以下500000回

Page 8: プログラミングで数を楽しむ:)

本当に?

Page 9: プログラミングで数を楽しむ:)

現状

495000 回以下の

「出ない感」がピンと来ない

疑うわけではないけど・・・

495000回以下

天文学的確率

Page 10: プログラミングで数を楽しむ:)

実際にやってみよう

× 1000000 回 × 10000 回ぐらい

495000回以下

Page 11: プログラミングで数を楽しむ:)

コンピュータにやらせてみよう

Page 12: プログラミングで数を楽しむ:)

簡単なプログラムを書きます

Page 13: プログラミングで数を楽しむ:)

プログラミング

ソースコード

1000000 回コインを投げるよ

コイン投げを10000 回試行するよ

495000回以下

コイン投げた

Page 14: プログラミングで数を楽しむ:)

結果 1

495000回以下

もうちょっと遊びます

Excel にこの実行結果をはりつけて

Page 15: プログラミングで数を楽しむ:)

結果 2

495000回以下

A.500000 回ジャストは

10000 回中 4 回出た

Page 16: プログラミングで数を楽しむ:)

他の遊び方

Page 17: プログラミングで数を楽しむ:)

例題 2.フェルマーの最終定理

Page 18: プログラミングで数を楽しむ:)

3 以上の自然数 n について、xⁿ + yⁿ = zⁿ となる1 以上の自然数 x 、 y 、 z の組が存在しない

32 + 42 = 52

9 + 16 = 25

1442 + 1652 =2192

あるけど アリエナイ

1303 + 1353≠1673

1203 + 1553≠1763

Page 19: プログラミングで数を楽しむ:)

「あり得ない感」がピンと来な

同じパターンで恐縮ですが・・・

Page 20: プログラミングで数を楽しむ:)

xⁿ + yⁿ = zⁿ はなくても、

xⁿ + yⁿ = zⁿ±1 ~ 3 程度の誤差な

大量にあったりするの?と初めて出会った時思い

Page 21: プログラミングで数を楽しむ:)

今度は 1 行で探してみる

Page 22: プログラミングで数を楽しむ:)

1 ~ 20 くらいで探してみる

Page 23: プログラミングで数を楽しむ:)

[(x, y, z, d)|d<-[-7..7],z<-[1..20], y<-[1..z-1], x<-[1..y], z^3+d==y^3+x^3]

プログラミング

ソースコード許容誤差

z が取りうる範囲

https://tryhaskell.org/

X が取りうる範囲Y が取りうる範

囲知りたい条件(フィルター)

Page 24: プログラミングで数を楽しむ:)

TRY HASKELL

Page 25: プログラミングで数を楽しむ:)

Λ [(x, y, z, d)|d<-[-7..7],z<-[1..20], y<-[1..z-1], x<-[1..y], z^3+d==y^3+x^3]

[(1,1,2,-6),(5,6,7,-2),(6,8,9,-1),(9,10,12,1),(4,4,5,3)]

20まで探索しただけでも

意外とある!

Page 26: プログラミングで数を楽しむ:)

例題 3.初見の問題

Page 27: プログラミングで数を楽しむ:)

Twitter で流れてくる面白問題の答え合わせをしたり

※完全数 :[6,28,496,8128...]

Page 28: プログラミングで数を楽しむ:)

つたえたかったこと

▸ 1つ1つの思いつきを全部シミュレーションしてい

たら10万年あっても足りない!

▸ コンピュータがなかったら、コイン投げ続けるだけ

の人生だった

Page 29: プログラミングで数を楽しむ:)

あまった時間で作ったもの紹介

Page 30: プログラミングで数を楽しむ:)

Place your screenshot here

素数百人一首

Place your screenshot here

素数判定&タイマー

挑戦者求む

2 時間で作ったシリーズhttp://primedaifugo.xyz/carta

他の人の判定表示

@ shoko3168