Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Liczby pierwsze
Forum PHP.pl > Forum > Przedszkole
piotrooo89
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.
erix
  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
djstrong
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;
piotrooo89
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
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.