php谜语 - 有趣的结果

Yuv*_*rmi 2 php logic

我有以下代码:

<?php

$cups = array();
for($i=0; $i<500; $i++){
    $cups[$i] = 0;
}

for($x=1; $x<500; $x++){
    for($y=$x; $y<500; $y+=$x){
        $cups[$y] = !$cups[$y];
    }
}

foreach($cups as $key => $value){
    if($value == 1){
        echo "{$key}, ";
    }
}

?>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我填充了一个包含500个零的数组,循环两次,然后打印出其中包含"1"的杯号:

1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484,
Run Code Online (Sandbox Code Playgroud)

如你所见 - 它输出正方形.我认为这种现象令人印象深刻,但我对数学解释很感兴趣 -

为什么会出现这种模式?

谢谢!

Pow*_*ord 8

它是这样工作的,因为这是经典的储物柜问题 ...而在储物柜问题中,只返回具有奇数个因子的数字......这些都是正方形.