Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Algorytm sprawdzający czy dana liczba jest pierwsza., Gdzie jest błąd?
xamrex
post
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


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.
Go to the top of the page
+Quote Post
zordon
post
Post #2





Grupa: Zarejestrowani
Postów: 358
Pomógł: 78
Dołączył: 4.11.2008
Skąd: Kraków

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


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ć
Go to the top of the page
+Quote Post
xamrex
post
Post #3





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


dzięki działa
Go to the top of the page
+Quote Post
celbarowicz
post
Post #4





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

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


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

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

 



RSS Aktualny czas: 23.08.2025 - 06:40