Personal tools

Pythonのジェネレータを使って素数を求める

by ats posted at 2006-06-16 18:54 last modified 2006-06-17 02:03

キミならどう書く 2.0 - ROUND 1 -

Python 2.3から(だったっけな?)導入された「ジェネレータ関数」を使って素数を求めてみましょう。

 >>> def primegen(x=2):        # 素数を返すジェネレータ関数を定義
 ...     while True:
 ...         if not [i for i in range(2,x) if x % i == 0]:
 ...             yield x       # 割りきれる数が見つからなかったらyield
 ...         x += 1
 ... 
 >>> i = primegen()            # イテレータオブジェクトを得る
 >>> while True:
 ...    prime = i.next()       # ジェネレータ関数から次の素数を得る
 ...    if prime > 100: break; # 素数が100を越えたらループを終了
 ...    print prime,           # 素数を表示
 ...  
 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

ジェネレータ関数の面白さを知って頂くことが目的。アルゴリズムは素朴です。

Pythonのジェネレータ関数を使うと,「イテレーション」を手軽に行うことができます。yield文はreturn文のようなもので,関数から値を返します。return文と異なるのは,yieldの後も関数の実行が継続する点です。

whileで100以下に限定していますが,ジェネレータを使うと,計算時間が許す限り無限に素数を生成できます。

あ,インタラクティブシェルを使っていますので,「>>>」や「...」を打ち込む必要はありません:-)。

Category(s)
python
The URL to Trackback this entry is:
http://coreblog.org/ats/using-generator-to-produce-prime-numbers/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
コメントスパム避けのための認証文字列です

Captcha Image

Pythonな求人
r = urlopen("http://www.webcore.co.jp/recruit")
About this blog
■Author
atsこと柴田淳です。この記事を読んでいただくと,技術者としての人となりを分かってもらえるかも。
Webcore株式会社 代表取締役
Plone上で動く,オープンソースのBlog Product - COREBlog2を使って運用しています。

最近書いた原稿
最終回 Python 3.0座談会(動画つき) 2009-07-16
Python 3.0 Hacks 第6回 Pythonicな文字列フォーマットforamat()メソッド 2009-03-30
言語としての一貫性を重視したPython 3の進化 2009-02-20
Python 3が後方互換性を捨てても求めたもの 2009-02-02
Python 3.0 Hacks : 第0回 Pythonの2008-2009 2009-01-01
 
最近書いた本,Mook
みんなのPython 改訂版
Python使いはもちろん,プログラミングの初心者から,他言語からの移行組までご好評いただいているPythonの定番入門書の第2版です。Python 3.0を含む最新の情報について加筆を行い,より読みやすいように構成を大幅に見直しました。第一版をお持ちの方にもお役立ていただける内容になっています。
みんなのPython Webアプリ編
Pythonの基礎から,Webアプリやフレームワークの仕組みまで,つまることなく一気に学べる書籍です。「みんなのPython」と一緒に読んでください:-)。
 

Powered by Plone, the Open Source Content Management System