forked from: 素数を数えて落ち着く
forked from 素数を数えて落ち着く (diff: 68)
素数カウント
ActionScript3 source code
/**
* Copyright tepe ( http://wonderfl.net/user/tepe )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/paq9b
*/
// forked from keno42's 素数を数えて落ち着く
// 素数カウント
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.Event;
public class FlashTest extends Sprite {
private var tf:TextField = new TextField();
private var tf2:TextField = new TextField();
private var list:Vector.<uint> = new Vector.<uint>();//素数列
private var index:int = 3;//判定する整数
private var str:String = new String();
private var str2:String = new String();
private var s1:Sprite = new Sprite();
public function FlashTest() {
// write as3 code here..
addChild(s1);
s1.graphics.lineStyle(0,0x0000ff);
addChild(tf);
tf.height = 465;
tf.width = 465;
tf.multiline=true;
addChild(tf2);
tf2.x = 200;
tf2.width=200;
tf2.height=465;
tf2.multiline=true;
init1();
addEventListener("enterFrame", onEnterFrame);
}
private var cnt:int=0;
private var size:int = 100;//まとめて探索
private function onEnterFrame(e:Event=null):void{
cnt++;
//if(cnt%20 != 0)return;
var st:Date = new Date();//処理時間計測
var i:int;
for(i=0;i<size;i++){
while(!func()){}
}
var end:Date = new Date();
var time:int = end.time - st.time;
s1.graphics.moveTo(cnt,400-(time));
s1.graphics.lineTo(cnt,400);
s1.scaleX = 465/(cnt)
str = "";
var n:int = 30;
if(list.length<30)n=list.length;
for(i=list.length-n;i<list.length;i++){
str += "["+i.toString()+"] = "+list[i].toString()+"\n";
}
tf.text = str;
}
private function init1():void{
list.push(2);
index = 3;
}
//素数判定
private function func():Boolean{
//3以降の素数の倍数か判定
for(var i:uint=1;i<list.length;i++){
var n:uint = index%list[i];
if(n==0){//index が 素数の倍数なら終了
index+=2;//素数は2以外すべて奇数。素数の次は必ず偶数。偶数は飛ばす。
return false;
}
}
//リストに引っかからなければ素数として追加
list.push(index);//素数列に追加
index+=2;//素数は2以外すべて奇数。素数の次は必ず偶数。偶数は飛ばす。
return true;
}
}
}