Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] operator ”%” – reszta z dzielenia
Forum PHP.pl > Forum > Przedszkole
mariooo
Witam!
Mam pewien problem, z którym nie mogę sobie dać rady już od dłuższego czasu... Napisałem program wywołujący liczby pierwsze z przedziału 1-1000, jednak chciałbym zastosować w nim operator "%". Wkleje tu to co napisałem i bardzo prosze o pomoc w modyfikacji i sprawdzeniu ewentualnych bledow, bo przyznam szczerze ze sa to moje poczatki z php.

  1. <html>
  2. <head>
  3. <title> Liczby pierwsze
  4. </title>
  5. <link rel=stylesheet href="styl.css" type="text/css">
  6. </head>
  7. <body>
  8.  <h1> Liczby pierwsze z przedzialu 1-1000: </h1>
  9. </body>
  10. </html>
  11.  
  12. <h2>
  13. <?php
  14. $m=1000; //gorny przedzial w ktorym maja by szukane liczbny pierwsze
  15. for ($l = 2 ; $l<=$m ; $l++)
  16. {
  17. $tablica[$l]="TRUE";
  18. }
  19. for ($l = 2 ; $l<=$m ; $l++)
  20. {
  21. $s=$l+$l;
  22. while ($s<=$m)
  23. {
  24. $tablica[$s]="FALSE";
  25. $s=$s+$l;
  26. }
  27. }
  28. for ($l = 2 ; $l<=$m ; $l++)
  29. {
  30. if ($tablica[$l]=="TRUE")
  31. {
  32. echo " ".$l." ";
  33. }
  34. }
  35. ?>
  36. </h2>
Fusin
Po pierwsze przeczytaj regulamin, zapomniałeś o bbcode

Pozdrawiam winksmiley.jpg
dr_bonzo
Fusin: od tego jest przycisk Raportuj

mariooo: prosze uzyc bbcode do wstawiania kodu , tu [php ] .... [/php ] (bez spacji przed ']')
mariooo
Cytat(Fusin @ 29.11.2006, 18:26:31 ) *
Po pierwsze przeczytaj regulamin, zapomniałeś o bbcode

Pozdrawiam winksmiley.jpg



Co prawda nie o takie rady mi chodzilo, ale i tak dzieki ze chcialo Ci sie przeczytac moj temat. Moze ktos inny mi pomoze;)
zleek
Pierwsze co mi sie rzuciło w oczy odnośnie już samego html'a to to, że po h1 zamykasz body i html po czym wystepuje h2.

Przerzuć h2 przed body winksmiley.jpg
mariooo
Cytat(zleek @ 29.11.2006, 18:44:26 ) *
Pierwsze co mi sie rzuciło w oczy odnośnie już samego html'a to to, że po h1 zamykasz body i html po czym wystepuje h2.

Przerzuć h2 przed body winksmiley.jpg


No tak, to jest bardzo dobry pomysl;)
jednak nadal nie wiem co z tym operatorem...
dtb
oto kod:
  1. <?php
  2. for($i=3; $i<=1000; $i+=2) {
  3. $p = true;
  4. for($j=$i-2; $j>2; $j-=2) {
  5. if ($i % $j == 0) {
  6. $p = false;
  7. break;
  8. }
  9. }
  10. if ($p) echo $i.', ';
  11. }
  12. ?>

ale dalo mi to troche do myslenia. sprawdzilem czasy wykonywania skryptow i roznica byla olbrzymia. skrypt mariooo wykonywal sie 6 razy szybiej. biorac pod uwage, ze w jego skrypcie jest wiecej petl, a w moj pomija parzyste liczby (czyli mniej liczenia) doszlem do wniosku, ze to wina operatora %. to przez niego skrypt sie tak dlugo wykonuje.
evantis
marioo, jeżeli się nie mylę, Twój program robi następującą rzecz:
1) tworzy tablicę 999-elementową wypełnioną wartościami true
2) zmienia wartości indeksów parzystych od 4 do 1000 na false
3) wypisuje z tablicy wszystkie wartości true

to raczej nie jest sposób na wyłowienie liczb pierwszych a jedynie na odrzucenie parzystych (zauważ, że gdy $s=$l+$l to $s jest dla każdego $l parzyste, bo $l + $l = 2* $l).

dtb drobna wskazówka - sprawdzając podzielność jakiejś liczby przez inną nie ma konieczności sprawdzania tego dla wszystkich mniejszych liczb. Podzielniki nigdy nie będą większe niż połowa danej liczby, a wykluczając w przypadku liczby parzystej połowę tejże liczby, dzielniki będą mniejsze od 1/4 danej liczby) - mam tu na myśli Twoją pętlę for
dtb
evantis: myslisz sie. kod jest dobry. sam bym nie wpadl aby tak kombinowac, ale kod dziala :]
mariooo
dtb- jesteś wielki! ogromne dzieki za pomoc;) bo strasznie mnie to meczylo. Jednak faktycznie bez % skrypt wykonuje sie o wiele szybciej
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.