Project Euler 123

by uwi
@see http://projecteuler.net/index.php?section=problems&id=123
♥0 | Line 42 | Modified 2009-06-17 19:38:41 | MIT License
play

ActionScript3 source code

/**
 * Copyright uwi ( http://wonderfl.net/user/uwi )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/sVMJ
 */

package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.getTimer;
    // @see http://projecteuler.net/index.php?section=problems&id=123
    public class Euler123 extends Sprite {
        private var _tf : TextField;
  
        public function Euler123() {
            _tf = new TextField();
            _tf.width = 465;
            _tf.height = 465;
            addChild(_tf);
            
            var s : int = getTimer();
            _tf.appendText(solve().toString() + "\n");
            var g : int = getTimer();
            _tf.appendText((g - s).toString() + " ms\n");
        }
        
        // 素数列挙をちょっといじった程度
        private function solve() : int
        {
            var primes : Array = [2];
            var n : int = 2;
            for(var i : int = 3;;i+=2){
                var sq : int = Math.sqrt(i);
                var flag : Boolean = true;
                for each(var v : int in primes){
                    if(v > sq)break;
                    if(i % v == 0){
                        flag = false;
                        break;
                    }
                }
                if(flag){
                    // n : odd かつ 2 * n * i > 10^10
                    if((n & 1) == 1 && n * i > 5000000000){
                        return n;
                    }
                    primes.push(i);
                    n++;
                }
            }
            return -1;
        }
        
        /*
        private function enumPrimes(n : int) : Array
        {
            var ret : Array = [2];
            for(var i : int = 3;i <= n;i+=2){
                var sq : int = Math.sqrt(i);
                var flag : Boolean = true;
                for each(var v : int in ret){
                    if(v > sq)break;
                    if(i % v == 0){
                        flag = false;
                        break;
                    }
                }
                if(flag){
                    ret.push(i);
                }
            }
            return ret;
        }
        */
    }
}