Sposób na znajdowanie liczb pierwszych

Podzielność. Reszty z dzielenia. Kongruencje. Systemy pozycyjne. Równania diofantyczne. Liczby pierwsze i względnie pierwsze. NWW i NWD.
widescreen

Sposób na znajdowanie liczb pierwszych

Post autor: widescreen »

witam

wybaczcie laikowi to pytanie, ale jak najlatwiej znalezc liczby pierwsze ?
czy konieczne jest dzielenie przez kazda liczbe mniejsza wylaczajac jeden ?
arigo
Użytkownik
Użytkownik
Posty: 813
Rejestracja: 23 paź 2004, o 10:17
Płeć: Mężczyzna
Lokalizacja: Lublin
Pomógł: 28 razy

Sposób na znajdowanie liczb pierwszych

Post autor: arigo »

dla 100% sprawdzenia czy dana liczba jest pierwsza czy nie wystarczy dzielic ja przez kolejne liczby pierwsze poczynajac od 2 do pierwiastka kwadratowego ze sprawdzanej liczby.
jesli jakas liczba bedzie ja dzielic to sprawdzana liczba jest zlozona w przeciwnym wypadku jest pierwsza
paulgray
Użytkownik
Użytkownik
Posty: 157
Rejestracja: 23 wrz 2004, o 20:50
Płeć: Mężczyzna
Lokalizacja: AGH-EAIiE
Podziękował: 2 razy
Pomógł: 1 raz

Sposób na znajdowanie liczb pierwszych

Post autor: paulgray »

ilość tych liczb możesz zmniejszyć wyrzucajac wszystkie liczby parzyste
Awatar użytkownika
olazola
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 21 paź 2004, o 13:55
Płeć: Kobieta
Lokalizacja: Sopot
Pomógł: 36 razy

Sposób na znajdowanie liczb pierwszych

Post autor: olazola »

można zastosować sito Eratostenesa
Awatar użytkownika
Zlodiej
Użytkownik
Użytkownik
Posty: 1627
Rejestracja: 28 cze 2004, o 12:24
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 2 razy
Pomógł: 108 razy

Sposób na znajdowanie liczb pierwszych

Post autor: Zlodiej »

cos podobnego było w drugim poście tzn dzielić przez kolejne liczby pierwsze tzn ... kazda ktora sie dzieli poza tą liczbą jest liczbą złożoną
Awatar użytkownika
max
Użytkownik
Użytkownik
Posty: 3242
Rejestracja: 10 gru 2005, o 17:48
Płeć: Mężczyzna
Lokalizacja: Lebendigentanz
Podziękował: 37 razy
Pomógł: 778 razy

Sposób na znajdowanie liczb pierwszych

Post autor: max »

A co z jakimiś wydajniejszymi algorytmami sprawdzającymi czy liczba jest pierwsza? Proponowane sito Eratostenesa i tzw. "algorytm naiwny" gubią się już przy liczbach rzędu tysięcy. Sieć wspomina coś o algorytmie Lucasa-Lehmera, ale na czym on polega to się nie doszukałem. Czy ktoś zna jakiś _wydajny_ algorytm sprawdzający "pierwszość" liczby?
Z góry dziękuję i przepraszam za ignorancję.
Awatar użytkownika
ymar
Użytkownik
Użytkownik
Posty: 390
Rejestracja: 13 sie 2005, o 14:52
Płeć: Mężczyzna
Podziękował: 21 razy
Pomógł: 24 razy

Sposób na znajdowanie liczb pierwszych

Post autor: ymar »

paulgray pisze:ilość tych liczb możesz zmniejszyć wyrzucajac wszystkie liczby parzyste
podzielne przez trzy też? i pewnie przez pięć. tak myślę.
Fibik
Użytkownik
Użytkownik
Posty: 980
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 12 razy
Pomógł: 75 razy

Sposób na znajdowanie liczb pierwszych

Post autor: Fibik »

sito dobrze działa.
doszedłem prawie do tryliona w kilka minut - ale bez sita.
dalej nie mogłem - rejestry za krótkie...
Awatar użytkownika
max
Użytkownik
Użytkownik
Posty: 3242
Rejestracja: 10 gru 2005, o 17:48
Płeć: Mężczyzna
Lokalizacja: Lebendigentanz
Podziękował: 37 razy
Pomógł: 778 razy

Sposób na znajdowanie liczb pierwszych

Post autor: max »

Heh, szybkość to pojęcie względne - żeby tak uściślić, to mam napisać program który w 2 s. znajdzie najwyżej 15000 w kolejności liczbę pierwszą(163841) - tego sitem zrobić nie potrafię...
Dlatego pytam o wydajniejsze algorytmy.

EDIT: Znalazłem:), nie do końca rozumiem, ale znalazłem =]
- jakby ktoś miał ten sam problem.
arigo
Użytkownik
Użytkownik
Posty: 813
Rejestracja: 23 paź 2004, o 10:17
Płeć: Mężczyzna
Lokalizacja: Lublin
Pomógł: 28 razy

Sposób na znajdowanie liczb pierwszych

Post autor: arigo »

kiedys napykalem prosty kodzik w C o osiagach co w niewiele ponad 1 sec przeszukuje wszystkie liczby pierwsze od 1 do 1mln i zapisuje na dysk. dziala on metoda ta ktora opisywalem na poczatku lecz po paru optymalizacjach

Kod: Zaznacz cały

arigo@packard /tmp $ time ./pierw3 > pierw

real    0m1.197s
user    0m1.161s
sys     0m0.003s

arigo@packard /tmp $ tail -n 3 pierw
999961
999979
999983

arigo@packard /tmp $ cat /proc/cpuinfo 
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 9
model name      : Intel(R) Celeron(R) M processor         1300MHz
stepping        : 5
cpu MHz         : 1300.432
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr mce cx8 sep mtrr pge mca cmov pat clflu                                                                sh dts acpi mmx fxsr sse sse2 tm pbe
bogomips        : 2580.48
Awatar użytkownika
juzef
Użytkownik
Użytkownik
Posty: 876
Rejestracja: 29 cze 2005, o 22:42
Płeć: Mężczyzna
Lokalizacja: Koszalin
Pomógł: 66 razy

Sposób na znajdowanie liczb pierwszych

Post autor: juzef »

max, strona którą znalazłeś jest trochę nieaktualna, gdyż znany jest deterministyczny algorytm rozstrzygający czy liczba jest pierwsza działający w czasie wielomianowym.

Co do znalezienia 15000 liczby w kolejności chyba najszybsze będzie sito Eratostenesa.

Kod: Zaznacz cały

#include <stdio.h>
#include <math.h>
#define MAX 200000
#define TRUE 1

char pierwsze[MAX+1];
int i,k;

int main(){
for (i = 1; i <=  MAX ;i++) pierwsze[i] = TRUE;    
for (i = 2; i <= sqrt(MAX) ; i++) if (pierwsze[i]) 
    {
    for (k= i*2 ; k<=MAX ; k+=i) pierwsze[k] = 0;
    };
k=0;
for (i=2;i<=MAX;i++) 
    {
    if (pierwsze[i]) {
    k++;
    if (k==15000) {printf("%d
",i);return 0;}
    }
    }
return 0;
}
arigo
Użytkownik
Użytkownik
Posty: 813
Rejestracja: 23 paź 2004, o 10:17
Płeć: Mężczyzna
Lokalizacja: Lublin
Pomógł: 28 razy

Sposób na znajdowanie liczb pierwszych

Post autor: arigo »

ten kod mozna jeszcze porzadnie zoptymalizowac bez zbednego wglebiania sie w kod
Awatar użytkownika
max
Użytkownik
Użytkownik
Posty: 3242
Rejestracja: 10 gru 2005, o 17:48
Płeć: Mężczyzna
Lokalizacja: Lebendigentanz
Podziękował: 37 razy
Pomógł: 778 razy

Sposób na znajdowanie liczb pierwszych

Post autor: max »

Jak dla mnie kod jest ok...
Btw. - ciekawość - ludzka rzecz : jak wygląda ten nowy algorytm?
Awatar użytkownika
Undre
Użytkownik
Użytkownik
Posty: 1232
Rejestracja: 15 lis 2004, o 02:05
Płeć: Mężczyzna
Lokalizacja:
Podziękował: 3 razy
Pomógł: 92 razy

Sposób na znajdowanie liczb pierwszych

Post autor: Undre »

... umbers.htm

to był mój pierwszy wynik w Googlach ... a jest ich wieeeeele więcej
Awatar użytkownika
max
Użytkownik
Użytkownik
Posty: 3242
Rejestracja: 10 gru 2005, o 17:48
Płeć: Mężczyzna
Lokalizacja: Lebendigentanz
Podziękował: 37 razy
Pomógł: 778 razy

Sposób na znajdowanie liczb pierwszych

Post autor: max »

Ok. Dzięki wszystkim za pomoc - jednak sito jest rzeczywiście wydajne pod względem czasowym, tylko pamięciowo ten algorytm leży... ale mój problem jeszcze spokojnie rozwiązuje :]
ODPOWIEDZ