Pierwszym krokiem algorytmu testowania pierwotności AKS jest sprawdzenie, czy liczba wejściowa jest mocą doskonałą. Wydaje się, że jest to dobrze znany fakt w teorii liczb, ponieważ artykuł nie wyjaśnił go szczegółowo. Czy ktoś może mi powiedzieć, jak to zrobić w czasie wielomianowym? Dzięki.
23
Odpowiedzi:
Biorąc pod uwagę liczbę n, jeśli w ogóle można go zapisać jako (b> 1), a następnie b < log ( n ) + 1 . I dla każdej ustalonej b , sprawdzenie czy istnieje A z a b = n można zrobić za pomocą wyszukiwania binarnego. Chyba całkowity czas pracy to O ( log 2 n ) .zab b < log( n ) + 1 b za zab= n O ( log2)n )
źródło
Zobacz Bach i Sorenson, Algorytmy Sieve dla doskonałego testowania mocy, Al Algorytmica 9 (1993), 313-328, DOI: 10.1007 / BF01228507 i DJ Bernstein, Wykrywanie doskonałych mocy w zasadniczo liniowym czasie, Matematyka. Komp. 67 (1998), 1253-1283.
źródło
W artykule znalazłem ciekawe i eleganckie rozwiązanie: o wdrożeniu testu pierwszorzędności klasy AKS, autorstwa R. Crandalla i J. Papadopoulosa, 18 marca 2003 r.
źródło
Jakoś mogę pokazać, że algorytmem wyszukiwania binarnego jest .O ( l g n ⋅ ( l g l g n )2))
Po pierwsze, , jest b < l g n . Algorytm wyszukiwania binarnego: Dla każdego b używamy wyszukiwania binarnego, aby znaleźć a .zab= n b < l g n
b za
Za każdym razem, obliczanie kosztów l g b = l g l g n operacji za pomocą szybkiej potęgowanie . Dlatego pozostałym problemem jest zakres a .zab l g b = 1 g l g n za
Jeśli jest maksymalna możliwa wartość , a następnie przeszukiwanie binarne musi l g A operacjiZA za l g ZA
Zauważ, że , to znaczy l g A = l g nb l g a = l g n
Podsumowując,
∑lgA=lgn⋅(1
ps: Wszystkie lg są podstawą 2.
Kod Python:
źródło