Golfscript, 68 67 62 61 znaków
[.]({[.2@{1$1$%{)}{\1$/1$}if}*;;].,*0+{+}*.2$?@@.@+\@)!}do;,(
To wyrażenie: przyjmuje nstos i pozostawia wynik na stosie. Aby włączyć go do programu, który zabierze nze standardowego wejścia i wypisuje wynik na standardowe wyjście, wymień wiodącym [z~
Jego sednem jest [.2@{1$1$%{)}{\1$/1$}if}*;;](28 znaków), który zajmuje najwyższą liczbę na stosie i (dzięki nieefektywnemu algorytmowi) generuje listę jego głównych czynników. Odpowiednik pseudokodu w stylu C:
ps = [], p = 2;
for (int i = 0; i < n; i++) {
if (n % p == 0) {
ps += p;
n /= p;
}
else p++;
}
0+Tuż przed {+}*jest obsłużyć szczególny przypadek n==1, bo nie lubi Golfscript składane operacji binarnej nad pustą listę.
Jednym z nietrwałych punktów stałych jest 27; Znalazłem to bez użycia programu, biorąc pod uwagę mapowanie (p a -> a 2 p), co jest punktem stałym, jeśli a == p (a-1) / 2 , i próbowanie małych a. ( a==1podaje punkt stałości liczb pierwszych).
Wyszukiwanie za pomocą programu ujawnia drugi punkt stały: 30 = (2 + 3 + 5) * 3
Dodatek: dowód, że istnieją tylko dwa punkty stałe inne niż główne
Notacja: sopfr(x)jest sumą czynników pierwszych xz powtórzeniem (A001414). Omega(x)to liczba czynników pierwszych x(A001222). Tak więc funkcja następcy Higleya jesth(x) = sopfr(x) Omega(x)
Załóżmy, że mamy punkt stały, N = h(N)który jest iloczynem n=Omega(N)liczb pierwszych.
N = p_0 ... p_{n-1} = h(N) = n (p_0 + ... + p_{n-1})
Podstawowa teoria liczb: ndzieli się na p_0 ... p_{n-1}, więc w=Omega(n)z tych liczb pierwszych należą czynniki pierwszen . Wlog, weźmiemy je jako ostatnie w. Więc możemy podzielić obie strony ni uzyskać
p_0 ... p_{n-w-1} = p_0 + ... + p_{n-1}
lub
p_0 ... p_{n-w-1} = p_0 + ... + p_{n-w-1} + sopfr(n)
Biorąc pod uwagę, że wszystkie liczby pierwsze p_0 do p_{n-w-1}są większe niż 1, zwiększając każdy z nich zwiększa LHS ponad RHS. Tak więc dla danego nmożemy wyliczyć wszystkie rozwiązania kandydujące.
W szczególności nie może być rozwiązań, jeśli LHS jest większy niż RHS, ustawiając wszystkie „wolne” liczby pierwsze na 2. Tzn. Nie ma rozwiązań, jeśli
2^{n-w} > 2 (n-w) + sopfr(n)
Ponieważ sopfr(n) <= n(z równością tylko dla n = 4 lub n liczby pierwszej) możemy uczynić słabszym stwierdzeniem, że nie ma punktów stałych, jeśli
2^{n-w} > 3 n - 2 w
Trzymając wstały możemy wybrać różne wartości nsatysfakcji w=Omega(n). Najmniejszy taki njest 2^w. Należy zauważyć, że jeśli 2^{n-w}wynosi co najmniej 3 (tj. Jeśli n-w>1, co jest prawdą, jeśli n>2), to zwiększenie nprzy utrzymaniu wstałej zwiększy LHS bardziej niż RHS. Zauważ też, że dlaw>2 najmniejszych możliwych nnierówności są spełnione i nie ma punktów stałych.
Pozostają nam trzy przypadki: w = 0i n = 1; w = 1i njest liczbą pierwszą; lubw = 2 i njest półpierwotny.
Case w = 0. n = 1, więcN każda liczba pierwsza.
Case w = 1. Jeśli n = 2to N = 2pi wymagamy p = p + 2, co nie ma rozwiązań. Jeśli n = 3to mamy pq = p + q + 3i dwa rozwiązania, (p=2, q=5)i (p=3, q=3). Jeśli n = 5następnie 2^4 > 3 * 5 - 2 * 1, więc nie ma dalszych roztwory w = 1.
Case w = 2. Jeśli n = 4to N = 4pqi będziemy wymagać pq = p + q + 4. Ma to rozwiązanie liczb całkowitych p=2, q=6, ale nie ma najlepszych rozwiązań. Jeśli n = 6następnie 2^4 > 3 * 6 - 2 * 2, więc nie ma dalszych roztwory w = 2.
Wszystkie przypadki są wyczerpane, więc jedynymi nie-głównymi punktami stałymi są 27 i 30.
highley(1) == 1? Nie ma żadnych czynników pierwszych, więc wynikowa lista w 4) jest[1, 0]taka,highley(1) == 2jak ją widzę.