Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Liczby pierwsze
piotrooo89
post
Post #1


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Mam lekki problem z liczbami pierwszymi lub bardziej z zapisaniem ich do tablicy. Oto kod:

  1. <?php
  2. $liczba = 34;
  3. $p = 2;
  4. $g = sqrt($liczba);
  5. $j=0;
  6. while ($p <= $g)
  7. {
  8.    while (($liczba % $p) == 0 )
  9.    {
  10.        $liczba = $liczba/$p;
  11.        echo $p .'<br>';
  12.        $tab[$j] = $p;
  13.        $j++;
  14.    }
  15.    if ($liczba == 1)
  16.        break;
  17.    $p = $p + 1;
  18. }
  19. if ($liczba > 1)
  20. echo $liczba;
  21.  
  22. print_r($tab);
  23. $ile = count($tab);
  24. ?>


wypisuje on wszystkie liczby pierwsze ale zapisuje tylko jedną do tablicy. Rozkład na czynniki 34 daje nam 2 i 17 i to jest dobrze wyświetlane natomiast już podczas wstawiania do tablicy otrzymuje:
Array ( [0] => 2 )
tylko jedna wartość. pewnie znów jakiś głupi błąd logiczny którego nie mogę zlokalizować. proszę o pomoc.


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. <?php
  2. $tab[$j] = $p;
  3. ?>

A nie można po prostu
  1. <?php
  2. $tab[] = $p;
  3. ?>

? winksmiley.jpg

Poza tym, daj przed pętlą linijkę:
  1. <?php
  2. $tab = array();
  3. ?>


PS.
  1. <?php
  2. $p = $p + 1;
  3. ?>

Za dużo siedziałeś w Pascalu. tongue.gif


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
djstrong
post
Post #3





Grupa: Zarejestrowani
Postów: 65
Pomógł: 9
Dołączył: 22.09.2006

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


Nie o to chodzi. Masz główną pętle od p do g (czyli 2 do 5), dlatego w ogóle nie bierze pod uwagę 17, a jest ona wypisaywana w tym momencie:
Kod
if ($liczba > 1)
echo $liczba;

czyli w tym ifie dodaj $tab[]=$liczba;

Ten post edytował djstrong 24.01.2009, 16:23:23
Go to the top of the page
+Quote Post
piotrooo89
post
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Cytat(djstrong @ 24.01.2009, 16:20:40 ) *
Nie o to chodzi. Masz główną pętle od p do g (czyli 2 do 5), dlatego w ogóle nie bierze pod uwagę 17, a jest ona wypisaywana w tym momencie:
Kod
if ($liczba > 1)
echo $liczba;


to by się zgadzało ponieważ dla liczby 48 czynniki są: 2 2 2 2 3 i ładnie wpisywane są do tablicy.

w takim razie jak zrobić to aby chodziło bo robiłem na kilka sposobów i dostaję błędy.

//EDIT

kurka wiedziałem że jakiś głupi błąd dzięki ~djstrong. ~erix tobie również ponieważ muszę się oduczyć takiej inkrementacji a to nie z pascala tylko C tam tak robię smile.gif

Ten post edytował piotrooo89 24.01.2009, 16:27:30


--------------------
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 Aktualny czas: 20.08.2025 - 10:40