Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> pętla liczb wypisująca liczby pierwsze
szarik
post 12.07.2004, 08:14:02
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 5.07.2004

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
kszychu
post 12.07.2004, 10:27:01
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

Ostrzeżenie: (0%)
-----


Zauważ, że w linii 22 zmienna $test jest zwiększana.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
szarik
post 12.07.2004, 13:45:18
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 5.07.2004

Ostrzeżenie: (0%)
-----


ja również ją zwiększam co widać SQRT zawsze jest z cyfry o jeden więcej... a więc questionmark.gif
Go to the top of the page
+Quote Post
coolik
post 25.11.2004, 23:44:46
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 20.06.2004

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 22.06.2025 - 08:42