flash on 2014-11-25

by tepe
♥0 | Line 100 | Modified 2014-11-25 09:45:20 | 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/fUhy
 */

package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.events.Event;
    import flash.utils.*;
    public class FlashTest extends Sprite {
        
        private var tf:TextField = new TextField();
        private var tf2:TextField = new TextField();
        
        private var s1:Sprite = new Sprite();
        private var s2:Sprite = new Sprite();
        
        private var p4:primeList4 = new primeList4();
        
        public function FlashTest() {
            
            
            addChild(s1);
            s1.y = 450;
            s1.graphics.lineStyle(0,0x0000ff,0.9);

            

            addChild(tf);
            tf.height = 465;
            tf.width = 465;
            tf.multiline=true;        
            s2Init();
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
        
        private function s2Draw(n:uint=1,limit:uint=1,pos:uint=0):void{
            s2.graphics.clear();
            s2.graphics.lineStyle(0,0x000000);
            s2.graphics.beginFill(0x0000ff,0.5);
            s2.graphics.drawRect(0,0,200,10);
            
            s2.graphics.beginFill(0x0000ff,0.5);
            s2.graphics.drawRect(0,0,200*1/(n/limit),10);
     
        }

        
        private function s2Init():void{
            addChild(s2);
            s2.x = 200;
            s2.y = 50;
            
        }


        private var str2:String = new String();

        private var cnt:int=0;
        private var size:int = 1;//1回で探索する数 
        private var time:int//時間計測
        private function onEnterFrame(e:Event=null):void{
            
            cnt++;
            //if(cnt%30 != 0)return;//処理速度調整

            p4.func()

            draw();
            s2Draw(p4.n,p4.limit);
        }
        
        
        
        private var scale:int=400;
        private var peek:uint=400;
        private function draw():void{
            

            s1.scaleX = 465/(cnt);
 

            if(scale<peek){
                scale++;
                s1.scaleY = 400/scale;
            }

            
            var str:String = ""; 
            var len:int = 30;
            if(p4.length<30)len = p4.length;
            for(var i:int=p4.length-len; i<p4.length; i++){                
                str += "prime["+i.toString()+"] = "+p4.prime(i).toString()+"\n";
            }
            str += p4.n.toString()+"\n";

            tf.text = str;
        }

        


    }
}

import flash.display.*;
import flash.utils.*;

    
///--------------------------------   

    class primeList4 {
        
        private var list:Vector.<uint> = new Vector.<uint>();//素数リスト
        private var _n:uint=0;//判定する整数
        private var _limit:uint = 0;
        
        public function primeList4(){
            init();
        }
        public function get length():uint{
            return list.length;
        }

        public function prime(index:uint):uint{
            if(list.length<=index)return 0;
            return list[index];
        }
        
        public function get limit():uint{
            return _limit;
        }
        public function get n():uint{
            return _n;
        }



        
        //2の倍数での処理を省略
        private function init():void{
            list.push(2);
            _n = 1;
        }
        public function func():Boolean{
            _n+=2;

            //リスト内の素数に引っかからなければ追加
            for(var i:uint=1;i<=_limit;i++){
                if(0 == _n % list[i] )return false;//index  素数の倍数なら終了
            }
            list.push(_n);
            if( list[_limit]*list[_limit] < _n ) _limit++;
            return true;
        }
        
        
        
    }