Project Euler 250
@see http://projecteuler.net/index.php?section=problems&id=250
♥0 |
Line 45 |
Modified 2009-06-18 21:15:05 |
MIT License
archived:2017-03-10 21:05:51
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/vkdx
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.getTimer;
// @see http://projecteuler.net/index.php?section=problems&id=250
public class Euler250 extends Sprite {
private var _tf : TextField;
// めっさおもいです!!!!
public function Euler250() {
_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() : Number
{
var i : int, j : int, v : uint;
var m250 : Vector.<uint> = new Vector.<uint>();
for(i = 1;i <= 250250;i++){
// i ^ i % 250
var ii : uint = i % 250;
v = 1;
for(j = i;j > 0;j >>= 1){
if((j & 1) == 1)v = (v * ii) % 250;
ii = (ii * ii) % 250;
}
m250.push(v);
}
var c250 : Array = [1];
for(i = 1;i <= 249;i++)c250.push(0);
var newc250 : Array;
for each(var m : int in m250){
// simulate
newc250 = c250.concat();
for(i = 0;i <= 249;i++){
newc250[(i + m) % 250] += c250[i];
}
for(i = 0;i <= 249;i++){
c250[i] = newc250[i] % 10000000000000000;
}
}
return c250[0] - 1; // -1 : empty subset
}
}
}