forked from: 素数を数えて落ち着く

by tepe forked from 素数を数えて落ち着く (diff: 68)
素数カウント
♥0 | Line 67 | Modified 2014-11-20 10:25:55 | MIT License
play

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;
        }

        


    }
}

Forked