Utwórz funkcję, wyrażenie lub program, który wykonuje następujące czynności:
- Weź czynniki pierwsze dowolnej liczby i zsumuj je. Na przykład czynniki pierwsze 28 wynoszą 2 2 7, zsumowane do 11.
- Pomnóż wynik przez liczbę czynników pierwszych dla podanej liczby. Np. 28 ma 3 czynniki pierwsze, które sumują się do 11. 11 * 3 to 33.
- Powtórz proces rekurencyjnie, przechowując wynikową listę (która zaczyna się od oryginalnego numeru), aż dojdziesz do liczby, która jest już na liście. Zatrzymaj się bez dodawania tego ostatniego numeru, aby lista nie zawierała duplikatów. Progresja dla 28 wynosi 28 33, ponieważ 33 daje ponownie 28.
- Policz elementy na wynikowej liście. W przypadku 28 odpowiedź brzmi 2.
Oto wyniki dla 0<n<=10
, dzięki czemu możesz sprawdzić swój algorytm.
2 1 1 10 1 11 1 9 5 10
(Jak zauważył Balpha, odpowiedź na higley(1)
to 2, z listy 1 0. Pierwotnie miałem 1, z powodu błędu w moim oryginalnym algorytmie napisanym w J.)
Ponieważ jestem zarozumiałym SOBem i nie znalazłem tego w OEIS , nazwijmy to „Sekwencją Higleya”, przynajmniej na czas tej rundy golfa kodu. Jako dodatkowy bonus, znajdź pierwsze dwa n
z najniższą, higley(n)
gdzie n
nie jest pierwsza i n>1
. (Myślę, że są tylko dwa, ale nie mogę tego udowodnić.)
Jest to standardowy kod golfowy, więc jak zwykle wygrywa najmniejsza liczba naciśnięć klawiszy, ale proszę o głosowanie sprytnych odpowiedzi w innych językach, nawet jeśli są pełne.
highley(1) == 1
? Nie ma żadnych czynników pierwszych, więc wynikowa lista w 4) jest[1, 0]
taka,highley(1) == 2
jak ją widzę.Odpowiedzi:
J,
4745Możliwe, że byłoby to znacznie krótsze bez użycia
^:_
, ale mój mózg jest już wystarczająco usmażony.Edycja: (47-> 45) Dzień podwójnego kuponu.
Stosowanie:
źródło
#@((~.@,((+/*#)@:q:)@{:)^:_)`2:@.(=&1)
38 znaków.{
,{.
, i{:
wszystko oznacza różne rzeczy, ale{-
(na przykład) jest zdecydowanie sekwencja dwóch rzeczy,{
a-
.Golfscript,
68 67 6261 znakówTo wyrażenie: przyjmuje
n
stos i pozostawia wynik na stosie. Aby włączyć go do programu, który zabierzen
ze 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:0+
Tuż przed{+}*
jest obsłużyć szczególny przypadekn==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łycha
. (a==1
podaje 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 pierwszychx
z powtórzeniem (A001414).Omega(x)
to liczba czynników pierwszychx
(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 iloczynemn=Omega(N)
liczb pierwszych.N = p_0 ... p_{n-1} = h(N) = n (p_0 + ... + p_{n-1})
Podstawowa teoria liczb:
n
dzieli się nap_0 ... p_{n-1}
, więcw=Omega(n)
z tych liczb pierwszych należą czynniki pierwszen
. Wlog, weźmiemy je jako ostatniew
. Więc możemy podzielić obie stronyn
i 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
dop_{n-w-1}
są większe niż 1, zwiększając każdy z nich zwiększa LHS ponad RHS. Tak więc dla danegon
moż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śli2^{n-w} > 3 n - 2 w
Trzymając
w
stały możemy wybrać różne wartościn
satysfakcjiw=Omega(n)
. Najmniejszy takin
jest2^w
. Należy zauważyć, że jeśli2^{n-w}
wynosi co najmniej 3 (tj. Jeślin-w>1
, co jest prawdą, jeślin>2
), to zwiększenien
przy utrzymaniuw
stałej zwiększy LHS bardziej niż RHS. Zauważ też, że dlaw>2
najmniejszych możliwychn
nierówności są spełnione i nie ma punktów stałych.Pozostają nam trzy przypadki:
w = 0
in = 1
;w = 1
in
jest liczbą pierwszą; lubw = 2
in
jest półpierwotny.Case
w = 0
.n = 1
, więcN
każda liczba pierwsza.Case
w = 1
. Jeślin = 2
toN = 2p
i wymagamyp = p + 2
, co nie ma rozwiązań. Jeślin = 3
to mamypq = p + q + 3
i dwa rozwiązania,(p=2, q=5)
i(p=3, q=3)
. Jeślin = 5
następnie2^4 > 3 * 5 - 2 * 1
, więc nie ma dalszych roztworyw = 1
.Case
w = 2
. Jeślin = 4
toN = 4pq
i będziemy wymagaćpq = p + q + 4
. Ma to rozwiązanie liczb całkowitychp=2, q=6
, ale nie ma najlepszych rozwiązań. Jeślin = 6
następnie2^4 > 3 * 6 - 2 * 2
, więc nie ma dalszych roztworyw = 2
.Wszystkie przypadki są wyczerpane, więc jedynymi nie-głównymi punktami stałymi są 27 i 30.
źródło
n
przed jej policzeniem, czy istnieją jakieś niepierwotnen
po 49, dla których wspomniana sekwencja nie kończy się na 28?n
której granice podanohigley(n)
powyżej. (Pozwoliłoby to znacznie uprościć pętlę - wystarczyf(n)
powtórzyć czasy, a następnie odrzucić duplikaty).Ruby, 92 znaki
To rozwiązanie zakłada, że higley (1) to tak naprawdę 2, a nie 1 (patrz komentarz balpha powyżej):
źródło
Oktawa - 109 znaków
źródło
MATL , 19 bajtów
Wypróbuj online!
źródło