Project Euler 126
@see http://projecteuler.net/index.php?section=problems&id=126
♥0 |
Line 47 |
Modified 2009-08-15 16:46:50 |
MIT License
archived:2017-03-30 04:50:49
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/cC40
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.getTimer;
// @see http://projecteuler.net/index.php?section=problems&id=126
public class Euler126 extends Sprite {
private var _tf : TextField;
public function Euler126() {
_tf = new TextField();
_tf.width = 465;
_tf.height = 465;
addChild(_tf);
var s : int = getTimer();
t(solve(19000));
var g : int = getTimer();
t((g - s) + " ms");
}
// L(a,b,c,d)=2(ab+bc+ca)+4(d-1)(a+b+c)+4(d-1)(d-2)
// d : depth
// C(n) = #{(a,b,c,d)|L(a,b,c,d)=n}
private function solve(M : int) : int
{
var max : int = 0;
var ct : Array = new Array(M / 2);
for(var i : int = 0;i < M / 2;i++)ct[i] = 0;
var dsup : int = Math.sqrt((M - 1) / 2);
for(var d : int = 0;d <= dsup;d++){
var p : int = 2 * d * (d - 1);
var asup : int = (M / 2 - 2 * d * d - 1) / 2 / (d + 1);
for(var a : int = 1;a <= asup;a++){
for(var b : int = 1;b <= a;b++){
for(var c : int = 1;c <= b;c++){
var v : int = a * b + b * c + c * a + 2 * d * (a + b + c) + p;
if(v < M / 2){
ct[v]++;
}else{
break;
}
}}}}
for(i = 0;i < M / 2;i++){
if(ct[i] == 1000)t("1000!!\t" + (i * 2));
if(max < ct[i])max = ct[i];
}
return max;
}
private function t(o : *) : void
{
_tf.appendText("" + o + "\n");
}
}
}