Algorytm liczby pierwsze

morfeusz1
Użytkownik
Użytkownik
Posty: 25
Rejestracja: 19 mar 2009, o 18:23
Płeć: Mężczyzna

Algorytm liczby pierwsze

Post autor: morfeusz1 »

Prosiłbym o podpowiedzi/rozwiązanie do następującego zadania: Algorytm wypisujący liczby pierwsze, których iloczyn jest równy zadanej liczbie \(\displaystyle{ n>0}\)
Ostatnio zmieniony 11 mar 2011, o 16:37 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

Algorytm liczby pierwsze

Post autor: Afish »

Poczytaj o rozkładzie na czynniki pierwsze (faktoryzacji).
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

Algorytm liczby pierwsze

Post autor: norwimaj »

Gdybym umiał napisać program, który szybko rozkłada liczbę na czynniki pierwsze, to raczej nie chwaliłbym się tym na forum, tylko bym korzystał. Dlatego nie licz na satysfakcjonującą odpowiedź.
Na szczęście jest spora szansa że nikt nie potrafi, więc nasze pieniądze w bankach wydają się bezpieczne.
Xitami

Algorytm liczby pierwsze

Post autor: Xitami »

A jak wielkie może być N?
morfeusz1
Użytkownik
Użytkownik
Posty: 25
Rejestracja: 19 mar 2009, o 18:23
Płeć: Mężczyzna

Algorytm liczby pierwsze

Post autor: morfeusz1 »

Nie podano w zadaniu więc obojętnie jakie będzie
kokosek
Użytkownik
Użytkownik
Posty: 52
Rejestracja: 24 maja 2010, o 21:36
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 14 razy
Pomógł: 2 razy

Algorytm liczby pierwsze

Post autor: kokosek »

Skoro masz napisać algorytm, a nie program, to wielkość \(\displaystyle{ n}\) nie ma znaczenia.
Tak więc podpowiedź Afisha + Google i tyle.
Xitami

Algorytm liczby pierwsze

Post autor: Xitami »

Eratostenesowym sitkiem wycedziłem liczby pierwsze do pierwiastka z N
Korzystając z sita sprawdzam podzielność tylko przez liczby pierwsze < sqrt(N)
Jeżeli nie dzieli się przez żadną z nich to znaczy, że N jest liczbą pierwszą
Jeżeli znalazłem liczbę K przez którą N się dzieli, sprawdzam czy N/K jest liczbą pierwszą
W teście na pierwszość oczywiście korzystam z utworzonego już sita jako źródła podzielników

Na ideone.com 1000 razy test(4294049777) zająło 0,2 sekundy
1000 razy test(1073217479) 0,1 sekundy mHNVQ
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

Algorytm liczby pierwsze

Post autor: Afish »

Można też tym
Xitami

Algorytm liczby pierwsze

Post autor: Xitami »

Afish pisze:Można też tym
a co z np. 999974077=15161*65957
Brent trochę to ulepszył, rzadziej rozkłada ręce.
Wtedy czasem rho pomaga ale czy zawsze?-- 14 marca 2011, 01:23 --Testowanie pierwszości można zrealizować np. tak:

Kod: Zaznacz cały

int CzyPierwsza(int n){ // zwraca 1 jeżeli N jest liczbą pierwszą 
   //  bez mnożenia i dzielenia !!!
        int a,b,k=n-1,s=n-1, z=n-2;
        while(z>1){
                a=s;k=0;b=z;
                while(b){
                        if(b&1){
                                k+=a;
                                if(k>=n) k-=n;
                        }
                        a+=a;
                        if(a>=n) a-=n;
                        b>>=1;
                }
                if(k==0) return 0;
                s=k;
                z--;
        }
        return k+1==n;
}
ODPOWIEDZ