Project Euler 125
@see http://projecteuler.net/index.php?section=problems&id=125
♥0 |
Line 45 |
Modified 2009-06-30 04:46:41 |
MIT License
archived:2017-03-30 04:56:23
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/AuIC
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.getTimer;
// @see http://projecteuler.net/index.php?section=problems&id=125
public class Euler125 extends Sprite {
private var _tf : TextField;
public function Euler125() {
_tf = new TextField();
_tf.width = 465;
_tf.height = 465;
addChild(_tf);
var s : int = getTimer();
_tf.appendText(solve(100000000).toString() + "\n");
var g : int = getTimer();
_tf.appendText((g - s).toString() + " ms\n");
}
private function solve(N : int) : Number
{
var sq : int = Math.sqrt(N / 2);
// 同じ数で2通り以上の表現のものもあるんだね
var set : Object = {};
for(var n : int = 2;n <= sq;n++){
var n3 : Number = n * (n + 1) * (2 * n + 1) / 6;
for(var m : int = n - 2;m >= 0;m--){
var m3 : Number = m * (m + 1) * (2 * m + 1) / 6;
var val : Number = n3 - m3;
if(val >= N)break;
// _tf.appendText("" + val + "\n");
if(isPerindromic(val)){
// _tf.appendText("" + val + "\n");
set[val] = val;
}
}
}
var sum : Number = 0;
for each(var v : int in set)sum += v;
return sum;
}
private function isPerindromic(val : int) : Boolean
{
if(val % 10 == 0)return false;
var a : Array = [];
for(var i : int= val;i > 0;i /= 10)a.push(i % 10);
for(var p : int = 0, q : int = a.length - 1;p < q && a[p] == a[q];p++, q--);
return p >= q;
}
}
}