Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Algorytm sprawdzający czy dana liczba jest pierwsza.
Forum PHP.pl > Forum > PHP
xamrex
Znalazłem taki skrypt do sprawdzania liczby pierwszaej
  1. $n=5;
  2. $pierwsza = true;
  3. for ($i=2; $i<$n; $i++){
  4. if ($n % $i==0){
  5. $pierwsza = false;
  6. }
  7. }
  8. if($pierwsza){
  9. echo "liczba $n jest pierwsza";
  10. }else{
  11. echo "liczba $n nie jest pierwsza";
  12. }

Troszkę go zmodyfikowałem(kod poniżej)

  1. $n=6;
  2. for ($i=2; $i<$n; $i++){
  3. if ($n % $i==0){
  4. $pierwsza = false;
  5. }else{
  6. $pierwsza = true;
  7. }
  8. }
  9. if($pierwsza){
  10. echo "liczba $n jest pierwsza";
  11. }else{
  12. echo "liczba $n nie jest pierwsza";
  13. }

Oczywiście mój kod nie działa. Czy mógłby mi ktoś wytłumaczyć dlaczego?
Ja go rozumiem tak, że sprawdza wynik dzielenia modulo, jeśli jest to 0(czyli liczba złożona)zwraca fałsz a jeśli coś innego prawdę. Potem mamy warunek, jeśli pierwsza to prawda to wyświetla odpowiedni komunikat.

Problem w tym, że mój skrypt wyświetla, że wszystkie liczby są pierwsze.
zordon
zmieniając wartość $pierwsza w pętli nadpisujesz jej wartość. Przeanalizuj sobie iteracja po iteracji jak działa ten skrypt: dla liczby 6 w iteracji $i = 2 oraz $i = 3 do $pierwsza przypisane zostanie false(liczba nie jest pierwsza). Ale skrypt iteruje dalej i dla $i = 4 oraz $i = 5 nadpisuje tą wartość bo 6 nie jest podzielne przez 5. I taka wartość, jako ostatnia, zostaje. Daj sobie break; po przypisaniu false do $pierwsza i powinno działać
xamrex
dzięki działa
celbarowicz
usprawnij algorytm, liczb pierwszych szukaj wśród liczb nieparzystych(poza liczbą 1,2-sprawdź definicję liczby pierwszej) pozostałe parzyste dzielą się przez 2 więc nie ma potrzeby szukać wśród nich l.pierwszych, ponadto dzielenie wykonuj nie dalej niż do połowy danej liczby(dlaczego? sprawdź na kalkulatorze)
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-2025 Invision Power Services, Inc.