题:有100盏电灯,开始全都亮着,然后按100内的质数依次来拨动开关,例如:将2和2的倍数的序号的灯开关拨一次(这时这些灯被关),然后再将3和3的倍数的序号的灯开关拨一次......等等,这样到97,求最后亮灯的序号
解:
var MAX:int = 100;
//初始值
var arr:Array = [];
for (var i = 1; i < MAX + 1; i++)
arr.push(i);
//求素数
var primeNumbers:Array = [];
loop:for (i = 2; i < MAX; i++)
{
for (var j = 2; j < i; j++)
{
if (i % j == 0) continue loop;
}
primeNumbers.push(i);
}
//开关灯过程
for each (var number:int in primeNumbers)
{
for (i = 1; i < MAX / number + 1; i++)
{
var temp:int = number * i;
var index:int = arr.indexOf(temp);
if (index != -1)
arr.splice(index, 1);
else
{
if (temp < MAX + 1)
arr.push(temp);
}
}
}
//结果
arr.sort(Array.NUMERIC);
trace(arr);
ps:有一道小学奥数题(http://wenku.baidu.com/view/3c67ed5777232f60ddcca111.html),可以用类似方法解决