php bilmece - ilginç sonuç

3 Cevap php

Ben aşağıdaki kodu vardır:

<?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}, ";
    }
}

?>

Gördüğünüz gibi, ben iki kez bunun üzerinden 500 sıfır, döngü ile bir dizi doldurmak ve daha sonra onları bir '1 'var fincan numaraları yazdırmak:

1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484,

As you can see - it outputs squares. I think the phenomenon is impressive, but I am interested in a mathematical explanation -

Neden bu desen meydana gelir?

Teşekkürler!

3 Cevap

Tüm kareler olan ... Bu klasik Locker Problem, çünkü bu şekilde çalışır ... ve soyunma problem faktörlerin tek sayı olan sadece sayılar iade edilir.

Peki benzersiz her faktör için bir kez devlet saygısız.

Kareler benzersiz faktörlerin tek bir sayı var.

Ben yorumlarda oyun bir oyun tür koyun:

<?php

$cups = array();
for($i=0; $i<500; $i++){
    $cups[$i] = 0;
}
// fill up indices 1-500

// at this step you set up the loop, and increment x
for($x=1; $x<500; $x++){
// since $x is now 2, you are actually looping from 2 to 500, and
// adding 2 to every iteration of $y
    for($y=$x; $y<500; $y+=$x){
 // now you're only showing a value if theyre not the same
    $cups[$y] = !$cups[$y];
    }
}

foreach($cups as $key => $value){
    // here you only loop through those with a value (which is every value + 2) 
    // you are basically counting by 2s (2, 4, 
    if($value == 1){
        echo "{$key}, ";
    }


}

Temelde ne oluştururken kareler garip faktörler, ile sayılar bir listesidir.

Her değer değerine + 2 sırayla artırılır nasıl fark:

1  + 3 = 4
4  + 5 = 9
9  + 7 = 16
16 + 9 = 25

ve benzerleri.

Birisi çok daha doğru ve özlü yaptım daha bunu açıklayacağız eminim, ama bu size burada neler olup bittiğini biraz fikir verir.