Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pętla liczb wypisująca liczby pierwsze
Forum PHP.pl > Forum > Gotowe rozwiązania
szarik
Mam taki oto kodzik
  1. <?php
  2.  
  3. $limit = 500;
  4. $test = 2;
  5. while(TRUE)
  6. {
  7.  $podziel = 2;
  8.  if ($test > $limit)
  9. break;
  10.  while(TRUE)
  11.  {
  12.  if ($podziel > sqrt($test))
  13.  {
  14.  print(&#092;"$test \");
  15.  break;
  16.  }
  17.  if ($test % $podziel == 0)
  18.  break;
  19.  $podziel = $podziel + 1;
  20.  }
  21.  $test = $test + 1;
  22. }
  23.  
  24. ?>

i niestety nie bardzo go rozumiem, wiem, że pierwsza pętla jest powtarzana aż do uzyskania $test większej niż 500. A druga ? Wiem że wypisuje liczbę jeżeli jej pierwiastek jest mniejszy od zmiennej $podziel.
no to zakładam, że $test i $podziel są 2,
  1. <?php
  2. 2 > sqrt(2)
  3. ?>

prawda więc wypisuje 2 i przerywa pętle, teraz
  1. <?php
  2. 2 > sqrt(3)
  3. ?>

prawda więc wypisuje 3 i przerywa pętle, astępnie 4,
  1. <?php
  2. 2 > sqrt(4)
  3. ?>

fałsz, więc idzie dalej.
I teraz jeżeli 4 dzieli się bez reszty przez 2 to przerywa, a że się dzieli to koniec pętli. i Teraz mam problem bo
  1. <?php
  2. 2 > sqrt(5)
  3. ?>

nie jest i 5 teoretycznie wypisać nie powinno, ale wypisuje, wypisuje mi wsztstki liczby pierwsze do 500. Gdzie popełniam błąd w moim rozumowaniu ?
kszychu
Zauważ, że w linii 22 zmienna $test jest zwiększana.
szarik
ja również ją zwiększam co widać SQRT zawsze jest z cyfry o jeden więcej... a więc questionmark.gif
coolik
  1. <?php
  2. $limit=500;
  3. $test=2;
  4.  
  5. while($test<$limit)
  6. {
  7. $niee=0;
  8. $nie=0;
  9. $podziel=2;
  10. while($podziel<$test)
  11. {
  12. $wynik=$test%$podziel;
  13. #jeśli reszta z dzielenia jest równa 0 znaczy ze nie jest pierwsza
  14. if($wynik==0)
  15. $nie++;
  16. #zwieksz dzielnik o jeden
  17. $podziel++;
  18. //zliczam czy liczba jest pierwsza
  19. $niee=$niee+$nie;
  20. }
  21. if($niee==0)
  22. echo$test .&#092;"<br>\";
  23. $test=$test+1;
  24. }
  25.  
  26. ?>



a oto moj skrypt.. moze nieco prymitywny ale rowniez bardzo dobrze dziala smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.