fc2ブログ

1ヶ月ぶりです

きっとみんなテストとかで忙しかった。たぶん今年度は高校3年になってしまうので、更新頻度かなり落ちるかと。 
 さて、数BのBASICの素数のリストを作るアルゴリズムがあまりに醜いのでPythonで書き直してみました。計算効率を計ってみた結果計算量がBASICのほうを自己流にアレンジして多少効率よくしても、646桁もの開きがあります。恐ろしい。問題は1~100000までにあるすべての素数を列挙するというもの。教科書の正攻法でいくと,100000!回、掛け算の対象性?を利用して求めても316!回計算が必要。恐ろしい。
Pythonのほうはリスト型で[2]という最初の素数2を入れたリストをまず作ってそれから修正していくという方法をとってみました。言葉じゃ説明しづらいのでソースは↓

n=100000
data=[2]
cnt=0
logdata=0
for i in range(n)[2:]:
for j in range(len(data)):
if (data[j]!=0)&(i!=0):
if i%data[j]==0:
cnt+=1
logdata+=1
if cnt==0:
data.append(i)
cnt=0
print data
print logdata

結果は...data(素数のリスト)はそれだけで64KBあるのでlogdata(計算回数)の部分だけかくと504793872でした。まだ、見ることのできる数字ですね。リスト型ってここまで便利なんだなと思った。サイズが動的確保なんでHSPやC++とかの配列より扱いやすい。
 さて、人工無能を育成ゲームに乗っけて見ました。実際の作業としては逆なんですけどね。人工無能に機能追加してみたらできちゃった感じ。画像↓
育成ゲーム
決して、本文が短くなるから画像とあまり関係ないPythonの記事で埋めたわけじゃない。たぶん。
author:いかろ

 
スポンサーサイト



検索フォーム
RSSリンクの表示
リンク
ブログランキング
ブログランキング
はやぶさ2署名プロジェクト
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード