Proje Euler 5. php şüphe!

4 Cevap php

problem euler #5

i çözüm bulundu ama bu ilk kod (i daha net kodu yapmak için denemek için 14 koymak) hızlıdır neden ben tek fark i i eğer büyük bir için yazdı için ortadan kaldırmak olduğunu bilmiyorum

if($num%14==0 && $num%13==0 &&$num%12==0 &&$num%11==0 &&$num%10==0 && $num%9==0 && $num%8==0 && $num%7==0 && $num%6==0 && $num%5==0 && $num%4==0 && $num%3==0 && $num%2==0 && $num%1==0){
	$notFound=0;
}

neden bu ikinci kod ilkinden çok daha yavaş derece olduğunu? Ile for daha hızlı olmak için varsayalım. Başka bir dilde aynıdır??

$notFound=0;
for ( $i=14; $i>=2 && notFound==0; $i--){
	if($num%$i!=0){
		$notFound=1;
	}
}

4 Cevap

Ikinci örnek kod sadece ilk daha fazla işlemleri gerçekleştirirken, bu yüzden daha yavaş olmasını beklersiniz. Bu durumda, düşük performans sunarken, bir for döngü ölçüde daha iyi okunabilirlik ve dayanıklılığını sunuyor bulmak istiyorum.

for ( $i=14; $i>=2 && notFound==0; $i--){

olmalıdır

for ( $i=14; $i>=2 && $notFound==0; $i--){

Ben büyük sayıya küçük giderdim. Bir sayı 14 ile bölünebilir ise 2 tarafından da bölünebilir çünkü.

$notFound = 0;
for ($i=2; $i<=14; $i++) {
    if ($num % $i !== 0) {
        $notFound = 1;
        break;
    }
}

Bunu yaparak mümkün olduğunca erken sayıları hariç tutabilirsiniz.

Ben bu (o döngü için ayrıştırmak ve yürütmek zorunda olan) PHP ile tercüman yükü nedeniyle olduğunu düşünüyorum.