Pythonを始めてみました


サイト関連のデータの処理なんかをしたいなぁ。
データ解析したいならRかPythonでしょうと。
そんなわけでPythonを始めてみることにしました。
RのフレームワークはShinyとかがあるみたいですが、あまり文献がなかったのでPythonにしときました。

とりあえず素数を数えてみる

始めたばかりなのでモジュールに何があるのかさっぱり把握していません。
ただHelloWorldだとあまりにつまらないので、素数を数えて落ち着くことにしました。
ブログのために習うより慣れろ方式でアタックしてみます。
お見苦しいコードかもしれませんがご容赦ください。
Pythonのバージョンは3.6.0です。

色々やってみた


とりあえずなんの工夫もなく100000までの素数を調べて見ました。
二乗に比例してループ総数が増えて行っちゃいますね。
これはちょっとダメですね(笑)
ちょっと改良して見ました。

基本はそのままでループの上限をnのルートを取ることにしました。
大分速くなりましたね。
思い切ってアプローチ方法を変えて見ましょう。
通称エラトステネスのふるいってやつです。

エラストテネスのふるいって?

コードはこんな感じです。

さっきよりも速くなりましたね。

エラストテネスのふるいとは、まず指定の整数の集まりを指定して小さいものから並べます。
先頭の数である2を素数として保存、2の倍数は全部除きます。
残った集まりの先頭の3を保存、3の倍数は全部除きます….(これを最後の数の平方根まで繰り返す)
こんな感じで保存された数の集まりが素数になっているというわけです。
これを行うことで必要な素数の数の分しか割り算を行わなくていいので、初めのやり方より効率的になります。

上記のコードを見てみると、同様な考え方でやってます。
primesに100000の平方根である316以下の素数が入っていて、numsにはそれ以上の素数が入っています。
最後にそれを足すことで100000までの素数を全部ピックアップしています。

最後に

いかがでしたでしょうか。
アルゴリズムを考えるのは面白いですよね。
まだまだ他にも色々なやり方があるので考えて見たら面白いかもしれませんね。
ブログに書くことで勉強のモチベにもなるのでオススメです。

以上tkでした。ではでは

ブログランキング
人気ブログランキングへ

tk

こんにちはtkです。長いモラトリアムを経て現在は無職。寝ながらお金を稼げるシステムを作れないかと夢想中。。。。 PHP、Ruby、Javaなんかをいじってたりして、Scala勉強中。趣味は映画・海外ドラマ・読書です。何かオススメあれば是非!

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です