Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Liczby pierwsze
Forum PHP.pl > Forum > Przedszkole
Mlodycompany
Witam. Chciałbym zrobić generator liczb pierwszych do miliona. Liczba pierwsza to ta która dzieli się przez siebie i przez 1 czyli w sumie mam dwa dzielniki. Głowie się nad tym już parę godzin i nic dobrego nie wymyśliłem. Oto co zdołałem zrobić:
  1. <?php
  2. print('<pre>');
  3. function znajdzDzielniki($liczba){
  4. $dzielniki = array();
  5. for($i = 1; $i <= $liczba; $i++){
  6. $dziel = $liczba % $i;
  7. if($dziel == 0){
  8. $dzielniki[] = $i;
  9. }
  10. }
  11. print_r($dzielniki);
  12. }
  13. function znajdzPierwsze($liczba){
  14. $pierwsze = array();
  15. for($i = 1; $i <= 1000000; $i++){
  16. $dziel = $liczba % $i;
  17. if($dziel == 0){
  18. echo znajdzDzielniki($i);
  19. }
  20. }
  21. print_r($pierwsze);
  22. }
  23.  
  24.  
  25. echo znajdzPierwsze($_GET['liczba']);
  26. ?>

Czy ktoś mógłby mnie naprowadzić na opracowanie dobrego skryptu?? Proszę o pomoc.
piotrooo89
do miliona... szok no ale jak chcesz... ja mam cos takiego:

  1. <?php
  2. $limit=1000000;
  3. $test=2;
  4.  
  5. while($test<$limit)
  6. {
  7. $niee=0;
  8. $nie=0;
  9. $podziel=2;
  10. while($podziel<$test)
  11. {
  12. $wynik=$test%$podziel;
  13. if($wynik==0)
  14. $nie++;
  15. $podziel++;
  16. $niee=$niee+$nie;
  17. }
  18. if($niee==0)
  19. echo $test .' </ br>';
  20. $test=$test+1;
  21. }
  22. ?>
ddiceman
Mozna to uproscic obliczeniowo, bo wystarczy sprawdzac dzielniki od 2 do pierwsiastka z liczby a nie do liczby:
ps. jedynka jak wiadomo liczba pierwsza nie jest (liczba wg definicji to liczba naturalna, ktora ma dokladnie 2 rozne dzielniki naturalne: 1 i siebie)

  1. <?php
  2. define('ZAKRES', 1000000);
  3.  
  4. $liczby_pierwsze = array();
  5. for($liczba = 2; $liczba < ZAKRES; $liczba++){
  6. $liczba_moze_byc_pierwsza = true;
  7. for($dzielnik = 2, $dl = floot(sqrt($liczba)); $dzielnik < $dl; $dzielnik++){
  8. if($liczba % $dzielnik == 0){
  9. $liczba_moze_byc_pierwsza = false;
  10. break;
  11. }
  12. }
  13. if($liczba_moze_byc_pierwsza == true){
  14. $liczby_pierwsze[] = $liczba;
  15. }
  16. }
  17. ?>
Shili
Prawda jest taka, że sprawdzając warto skakać od cyfry 3 co 2. Przy wyłuskiwaniu liczb pierwszych.
Przy sprawdzaniu kolejnych warto na samym początku dać if liczba % 2 == 0, jeśli nie to w pętli również skaczemy od 3 co 2 elementy

Wiadomo, że 4, 14314, 141412412 nie są pierwsze. Na wstępie więc można je odrzucić. A jeśli coś dzieli się przez parzystą liczbę, to dzieli się również przez cyfrę 2, wystarczy więc sprawdzić tylko ten warunek.
Nie chce mi się modyfikować Waszych algorytmów, ale pozwoli to zaoszczędzić może nie tak dużo, ale zawsze trochę czasu winksmiley.jpg
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.