Jednym ze sposobów przedstawienia liczby naturalnej jest pomnożenie wykładników liczb pierwszych. Na przykład 6 może być reprezentowane przez 2 ^ 1 * 3 ^ 1, a 50 może być reprezentowane przez 2 ^ 1 * 5 ^ 2 (gdzie ^ oznacza eksponencję). Liczba liczb pierwszych w tej reprezentacji może pomóc ustalić, czy użycie tej metody reprezentacji jest krótsze w porównaniu z innymi metodami. Ale ponieważ nie chcę ich obliczać ręcznie, potrzebuję programu, który to dla mnie zrobi. Ponieważ jednak muszę pamiętać program, dopóki nie wrócę do domu, musi on być jak najkrótszy.
Twoje zadanie:
Napisz program lub funkcję, aby określić, ile różnych liczb pierwszych znajduje się w tej reprezentacji liczby.
Wejście:
Liczba całkowita n taka, że 1 <n <10 ^ 12, przyjęta dowolną normalną metodą.
Wynik:
Liczba różnych liczb pierwszych wymaganych do przedstawienia danych wejściowych, zgodnie z opisem we wstępie.
Przypadki testowe:
24 -> 2 (2^3*3^1)
126 -> 3 (2^1*3^2*7^1)
1538493 -> 4 (3^1*11^1*23^1*2027^1)
123456 -> 3 (2^6*3^1*643^1)
To jest OEIS A001221 .
Punktacja:
To jest golf golfowy , najniższy wynik w bajtach wygrywa!
Odpowiedzi:
MATL ,
43 bajty-1 bajt dzięki Luis Mendo
Wypróbuj online!
Oryginalna odpowiedź:
Wypróbuj online!
Ver
Yfun
odpowiedź.źródło
05AB1E , 2 bajty
kolejna dość nudna odpowiedź ...
Pełny program akceptujący wprowadzanie numeryczne i drukujący wynik
Wypróbuj online!
W jaki sposób?
źródło
Mathematica, 7 bajtów
Tak, jest wbudowany.
Mathematica, 21 bajtów
Długa droga dookoła.
źródło
Length@FactorInteger
to samo?Length@*FactorInteger
tworzy czystą funkcję: składLength
iFactorInteger
. Mogę zdefiniować,fun=Length@*FactorInteger
a następnie zadzwonićfun[1001]
. Z drugiej stronyLength@FactorInteger
oznaczałobyLength[FactorInteger]
i oceniałoby to0
.Gaia , 2 bajty
Jeszcze jedna nudna odpowiedź ... --- J. Allan
Wypróbuj online!
ḋ
- Rozkład na czynniki pierwsze jako pary [liczba pierwsza, wykładnik] .l
- długośćźródło
Python 2, 56 bajtów
źródło
Retina ,
3130 bajtówDane wejściowe są jednostkowe.
Dzięki @MartinEnder za grę w golfa 1 bajt!
Wypróbuj online!(obejmuje konwerter dziesiętny na unarny)
Jak to działa
Ponieważ program składa się z jednego wyrażenia regularnego z
&
modyfikatorem, Retina po prostu liczy liczbę nakładających się dopasowań. Zakłada się, że dane wejściowe składają się z n powtórzeń 1 i nic więcej.Negatywne spojrzenie w przyszłość
dopasowania w miejscach między 1 , po których nie występują dwa lub więcej 1 (
11+
), po których następuje jedno lub więcej powtórzeń o tej samej ilości 1 (\1+
), a następnie koniec wprowadzania ($
).Dowolna liczba kompozytu AB z a, b> 1 może być zapisana jako b powtórzeń a powtórzeń 1 , tak uprzedzona pasuje tylko miejsca następnie p powtórzeń 1 , gdzie p = 1 lub p jest liczbą pierwszą.
Wyrażenie regularne
upewnia się, że p> 1 , wymagając co najmniej dwóch 1 's (
11+
) i przechowuje ogon 1 ' w drugiej grupie przechwytywania (\2
).Wreszcie pozytywny wygląd
sprawdza, czy całe dane wejściowe składają się z wystąpień kp ( k ≥ 1 ) z 1 , sprawdzając, czy p dzieli dane wejściowe.
Zatem każde dopasowanie odpowiada unikalnemu dzielnikowi głównemu p .
źródło
Narzędzia Bash + GNU, 33
Wypróbuj online .
Wyjaśnienie
źródło
grep -Po ' \d+'
oszczędza bajttr \ \\n|sed 1d
.grep -Po '( \d+)\1*'
nie udaje się wprowadzić danych 46 .Galaretka , 3 bajty
dość nudna odpowiedź ...
Monadyczny link pobierający numer i zwracający numer
Wypróbuj online!
W jaki sposób?
źródło
Æv
?Æ
jest kodem alt 0198. 2. Możesz skonfigurować klawiaturę (nie mam). 3. Strona kodowa.Ohm v2 , 2 bajty
Wypróbuj online!
Dwa wbudowane elementy znajdują się obok siebie w dokumentacji lol.
źródło
Galaretka , 2 bajty
Jeszcze jedna nudna odpowiedź ... --- J. Allan
Wypróbuj online!
Wbudowany.
źródło
Alice , 10 bajtów
Wypróbuj online!
Wyjaśnienie
To tylko standardowa platforma dla liniowych programów obciążonych arytmetyką, które wymagają dziesiętnych operacji we / wy. Właściwy program jest wtedy po prostu:
Co robi:
źródło
JavaScript 45 bajtów
* W przypadku @SEJPM poproś o wyjaśnienie: to, co tutaj robię, to od 2 - n (które się zmieni, i ostatecznie będzie największym czynnikiem podstawowym) - teraz, jeśli bieżąca liczba dzieli, chcę ją policzyć tylko raz (nawet chociaż może to być współczynnik 2 * 2 * 2 * 3 - 2 jest liczone raz) - więc na obraz pojawia się „j”, gdy j nie jest określone w wywołaniu funcion - j otrzyma wartość „ undefined ", a gdy n% i == 0, wtedy wywołuję funkcję z j = 1 w następnym wywołaniu) - a następnie dodaję tylko 1, gdy j jest niezdefiniowany, co jest! j + Funkcja (n / i, i, ( j = 1 lub tylko 1)). nie zmieniam i w tej kwestii, ponieważ może nadal być podzielne przez i ponownie (2 * 2 * 3), ale wtedy j będzie równe 1 i nie będzie się liczyło jako czynnik. mam nadzieję, że wyjaśniłem to wystarczająco dobrze.
jeśli ostatnia liczba pierwsza jest bardzo duża, to będzie miała maksymalny stos wywołań - jeśli jest to problem, mogę zrobić iteracyjny
źródło
CJam ,
75 bajtówDzięki Martin Ender za 2 bajty!
Blok anonimowy (funkcja), który oczekuje numeru wejściowego na stosie i zastępuje go numerem wyjściowym.
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Brachylog , 3 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Pyth, 3 bytes
Test suite
Length (
l
) of set ({
) of prime factors (P
) of the input.źródło
Husk, 3 bytes
Try it online!
Explanation
źródło
Actually, 2 bytes
Yet another pretty boring answer... --- J. Allan
Try it online!
The first character can be replaced by
w
.źródło
Pyke, 3 bytes
Try it here!
źródło
Python 3,
6867 bytes1 byte removed thanks to @Mr.Xcoder
This times out for the largest test cases. Try it online!
źródło
R + numbers,
3014 bytes16 bytes removed thanks to @Giuseppe
Also, here is the Try it online!! link per @Giuseppe.
źródło
f=function(x)
and the(x)
asnumbers::omega
is a function already. However, asnumbers
is not standard for R, you should make your answer "R + numbers". Also, you should include a TIO link. Still, +1, very nice.MATL
solution is very nice (+1 yesterday).numbers::
. Otherwise, to me it's the same as using animport
in any other language.Convex, 3 bytes
Try it online!
źródło
Pari/GP, 5 bytes
I don't know why it is called nu in Mathematica but omega in Pari/GP.
Try it online!
źródło
Haskell, 58 bytes
-4 bytes thanks to @Laikoni
Try it online!
Explanation
Essentially generates all primes at most as large as
n
and filters them for being a factor of n and then takes the length of the result.źródło
sum[1|x<- ... ]
instead oflength
.Japt,
54 bytesTry it
Get the divisors (
â
) and count (è
) the primes (j
).źródło
ARBLE, 28 bytes
Try it online!
This is a very literal solution
źródło
Dyalog APL, 17 bytes
Try it online!
źródło
Python 2,
6355 bytesA much more interesting answer...
-8 bytes thanks to Jonathan Frech (use an argument with a default for the post-adjustment of the result of primes from
0
to1
-- much better than a wrapping lambda!!)A recursive function taking a positive integer,
n
, and returning a positive integer, the count.Try it online! Really inefficient, don't even bother with the other test cases.
źródło
J, 12 bytes
q:
is J's prime exponents function, giving it the argument__
produces a matrix whose first row is all nonzero prime factors and whose 2nd row is their exponents.We take the shape
$
of that matrix -- rows by columns -- the number of columns is the answer we seek.{:
gives us the last item of this two items (num rows, num columns) list, and hence the answer.Try it online!
źródło
Java (OpenJDK 9), 67 bytes
Try it online!
źródło
Javascript ES6, 56 chars
Test:
źródło