プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

【数学・Python】√2をシミュレーション

$\sqrt{2}$ってどうやってもとめるの!?という素朴な疑問リクエストを頂いたので、シミュレーションしてみます。

$\sqrt{2}$をシミュレーション

例えば、長さ4のメジャーから1点を選び、2より大きいか小さいかを考えます。
ただし、1点を選ぶ条件は0 ~ 2までの小数をランダムに選ぶものとし、それを2乗した値で上記の条件を比較します。

選ばれた値をAとし、もし$A^{2}$が2以下であれば、選ばれた点は$\sqrt{2}$以下ということになります。

この選ばれる点が$\sqrt{2}$以下である確率は、$\frac{\sqrt{2}}{2}$となりますから、この結果に2をかければ$\sqrt{2}$になることが想定されます。

以下、Pythonで実装

ルート2のシミュレーション

【数学】素数の話(Python付) -3-

www.pon-x.jp

www.pon-x.jp

前回まで素数の必要性を話していきましたが、そうしたらどうやって素数ってみつけていくのっていう話です。

素数とは、1より大きい自然数で、さらに約数がその数自身と1の2つしかないという数のことでしたよね。
では、素数を探す手順を紹介します。

2以外は奇数だけを考える。

1は約数が1つしかないので、2以上を考えるのですが、偶数は絶対に2を約数にもつので、2以外は奇数だけを考えます。

奇数の約数は奇数しかない

奇数の約数に偶数をもつことはないので、奇数の約数が存在するかを確認していけばよいのです。

その数の半分の数まで探せばよい。

例えば、69は素数かどうかを考えるとき、1と67以外に約数を持つかということを考えます。
小さい順から考えると、 $69 \div 2 = 34 \mbox{余り1}$ ・・・ 2は約数でない
$69 \div 3 = 23$ ・・・ 3は約数である。



ということがわかります。
ここで、3が約数ということであれば、23も約数であるということがわかります。
つまり69の半数までかぞえれば、残りの半数に約数が存在するか否かは断定できるのです。

コードにしてみる

def sosu(num):
    
    if num < 2:
        # 2以上の自然数対象
        return False
    
    elif num == 2:
        # 2は素数
        return True

    elif num % 2 == 0:
        # 2以外の偶数は素数でない
        return False

    else:
        # 奇数は1とその数と自身以外に約数があれば約数でない
        for i in range(3, num // 2, 2):
            if num % i == 0:
                return False
        else:
            return True



# 100未満の素数を探索する
for i in range(100):
    if sosu(i):
        print(i)

->
2   
3   
5   
7   
11   
13   
17   
19   
23   
29   
31   
37   
41   
43   
47   
53   
59   
61   
67   
71   
73   
79   
83   
89   
97   

→ 

【数学】素数の話 -2-

前回の続き

www.pon-x.jp

素数って何のためにあるの!?という話です。

例えば、整数について素数のかけ算に分解することを素因数分解といいます。

例 . $28 = 2 \times 2 \times 7 $

こんな感じです。

これをするととてもいいことがあるのです。 それは、2つの数において、最小公倍数最大公約数を求めることができるのです!!






それがなんなのさ・・・。と思う方!!これってとても大事なことなのですよ!!

  • 最小公倍数は通分
  • 最大公約数は約分

に使われているのです。
さすがに分数の話になるとその意味が分かりますよね!!

次回は、素数のアルゴリズムを考えてみます!!

【数学】素数の話 -1-

素数とは、1より大きい自然数で、さらに約数がその数自身と1の2つしかないという数のことです。

・・・どうでしょうか。ことばで書くと難しいですね。
ですので具体例をだしてみましょう。




2の約数は1と2の2つですから、2は素数です。
3の約数は1と3の2つですから、3は素数です。
4の約数は1と2と4の3つですから、3は素数ではありません。
5の約数は1と5の2つですから、5は素数です。
6の約数は1と2と3と6の4つですから、6は素数ではありません。
7の約数は1と7の2つですから、7は素数です。
8の約数は1と2と4と8の4つですから、8は素数ではありません。
9の約数は1と3と9の3つですから、9は素数ではありません。





といったように、約数がいくつあるかということを考えます。
次に、素数を小さい順に並べていきます。

2,3,5,7,11,13,17,19,23,29,31・・・
まだまだ素数は続き、無限にありますが、ここら辺の数まで調べられれば大抵どうにかなると思います。



また、これをみてわかるように、素数は2以外はすべて奇数です。
素数かどうかを調べるときは、まずその数が偶数か奇数かでまず判断すると早いとおもいますよ。





いかがでしたか。素数のあり方について理解ができたでしょうか。

それで結局、素数がってなに??と思ったことでしょう。
どのような使われ方をするのかということが、次に大切なことですね。
それはまた次回に触れようと思います。

【統計】眠くなる時間

f:id:hanabusa-snow:20201114084713p:plain

私が統計を教えている受講者に、このグラフは何だと思うか当てさせてみた。

いろいろ意見があがったが、記憶に残るコメントで 「眠くなる時間」
というのがあった。




確かに昼ごはんを食べた後はとても眠い!!
良い考察だ。
しかし、それ以外の時間帯はどういう解釈だ!?




やはり、可視化というのはグラフだけではすまないものだ。



<正解>
モバイル端末のトラフィック推移




参照元
DATA●GO.JP
情報通信白書_令和元年版
移動通信トラヒックの曜日別変化

【数学・JavaScript】MathJaxは数学系のWebページでとても便利だ!!

LaTexをより身近にしたのが、MathJaxだろう。

数式をWebページでこんなにもきれいに表現できる、しかも簡単!!

LaTex自体は、プログラムをかくよりよっぽど単純ですので、ぜひ多くの人に使ってもらいたいものである。

以下をヘッダで宣言するだけ。

<script type="text/x-mathjax-config">
  MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ["\\(","\\)"]] } });
</script>
<script type="text/javascript"
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_CHTML">
</script>





必須ではないが、数式の出力が中央揃いになってしまうので左寄せにするためのもの

.MathJax_Display {   
    text-align: left !important;   
    text-indent: 2em !important; 
}





例 解の公式

\begin{eqnarray}
    ax^{2}+b^{2}+c=0 \\
    x=\frac{-b\pm\sqrt{b^{2}-4ac}}{2a}
\end{eqnarray}

以下のように表示される。

$ax^{2}+b^{2}+c=0$

$x=\frac{-b\pm\sqrt{b^{2}-4ac}}{2a}$