Project Euler 159

by uwi
@see http://projecteuler.net/index.php?section=problems&id=
♥0 | Line 52 | Modified 2009-09-25 13:53:54 | 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/ftBk
 */

package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.getTimer;
    // @see http://projecteuler.net/index.php?section=problems&id=
    public class Euler extends Sprite {
        private var _tf : TextField;
  
        public function Euler() {
            _tf = new TextField();
            _tf.width = 465;
            _tf.height = 465;
            addChild(_tf);
            
            var s : int = getTimer();
            tr(solve(100000)); // 1000000
            var g : int = getTimer();
            tr((g - s) + " ms");
        }

        private function solve(M : int) : Number
        {
            _drss = new Array(M);
            var sum : Number = -1;
            for(var i : int = 1;i < M;i++){
                _drss[i] = drs(i);
                sum += _drss[i];
            }
            return sum;
        }
        
        private var _drss : Array;
        
        private function drs(n : int) : int
        {
            var max : int = 0;
            
            var dr : int = n;
            while(dr >= 10){
                var j : int = dr;
                dr = 0;
                for(;j > 0;j /= 10)dr += j % 10; // n
            }
            max = dr;
            
            var sq : int = Math.sqrt(n);
            for(var i : int = 2;i <= sq;i++){
                if(n % i == 0){
                    var v : int = _drss[i] + _drss[n / i];
                    if(v > max)max = v;
                }
            }
            return max;
        }
        
	private function tr(...o : Array) : void
	{
            _tf.appendText(o + "\n");
	}
    }
}