flash on 2014-11-25
♥0 |
Line 100 |
Modified 2014-11-25 09:45:20 |
MIT License
archived:2017-03-20 03:17:24
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;
}
}