g | x | w | all
Bytes Lang Time Link
001Nekomata230721T092837Zalephalp
001Thunno 2 L230721T061153ZThe Thon
005Nibbles220105T204439ZDarren S
003Risky220105T214120ZRydwolf
007BQN220110T221616Zovs
033MS Excel220110T215341ZTaylor A
007HBL220105T213351ZDLosc
041QBasic180622T044545ZDLosc
002Husk220105T160731ZNatte
042Add++220105T124210Zlyxal
001Vyxal l210522T085019ZWasif
034Excel210522T161038ZAxuary
018Factor + math.primes.factors210522T120829Zchunes
030Retina 0.8.2210226T010511ZNeil
019Julia210224T145140ZMarcMush
002APL Dyalog Extended201223T191526Zuser
022R200903T125611ZXi'a
091F#180624T222937ZCiaran_M
029JavaScript Node.js180622T123325ZNeil
018Perl 6180622T084800ZJo King
031Racket180622T081457Zpotato
002Brachylog180622T081319ZFatalize
008Pari/GP180622T050503Zalephalp
005Cjam180621T073723ZChromium
036Perl 6180621T215827ZPhil H
022Bash + GNU utilities180621T024121ZDigital
141Whitespace180621T095729ZKevin Cr
002Jelly180620T235323ZErik the
037JavaScript ES6180621T074148ZArnauld
037Python 2180621T065335Zxnor
018Octave180621T070717ZStewie G
003MATL180621T070543ZStewie G
043Stax180621T064235Zwastl
027Haskell180621T070328Zxnor
002Gaia180621T070018ZMr. Xcod
010Attache and Wolfram Language Mathematica polyglot180621T030853ZConor O&
086face180621T024127ZDoorknob
002Pyth180621T020215ZDigital
037R180621T014822Zngm
002Actually180621T014127ZOliver
004J180621T013204ZJonah
041dc180621T003743ZSophia L
003Japt180621T011440ZOliver
059Java 8180621T005045ZJakob
049Python 3180621T003702ZJo King
00205AB1E180621T003138ZCheese
062Python 2180621T001524ZChas Bro

Nekomata, 1 byte

ƒ

Attempt This Online!

ƒ factorizes the input number, and returns a list of unique prime factors and a list of exponents.

Only the top of the stack will be printed, which is the list of exponents. Since the input is a prime power, this will be a singleton list.

Thunno 2 L, 1 byte

f

Try it online!

Push the prime factors of the input then take the Length of the list.

Nibbles 5 bytes

,|`,$~^%@

This is 9 nibbles each of which is encoded in a half byte in the binary form. I think this is the shortest solution that doesn't use built in factoring.

Translation:

,      length
 |     filter
  `,$  0..input
  ~    not \x->
   ^   pow (so that 0 which would have been 0 from the mod isn't)
    %  mod
     @ input
     implicit $ (x)
    implicit $ (x) 

It works by just counting the number of numbers the input divides evenly

You could run it passing in a list of numbers to process in stdin or as a command line arg. Nibbles isn't on TIO.run yet...

Risky, 3 bytes

!\?___

Try it online!


A basically built-in solution for now, working on a non-trivial version (might not be possible given Risky's heavy investment in specific operators, and generally awful control flow).

!      Count
 \     Prime factors
  ?    Input
   ___ (Padding)

BQN, 7 bytesSBCS

+´0=↕|⊢

Run online!

Translates directly to Dyalog APL:

+/0=⍳|⊢

Try it online!

MS Excel, 33 bytes

An anonymous worksheet function that takes input from cell A1 and outputs to the calling cell

-SUM(-(MOD(A1,SEQUENCE(A1))<1))-1

HBL, 7 bytes

(or possibly 6.5 depending on how this meta question shakes out)

+(*'?(*%.(02.

Try it!

Explanation

+(*'?(*%.(
         (0    Inclusive range
           2    from 2
            .   to the argument
     (*        Map over each value x in that list:
       %.       Argument mod x
 (*            Map over each value in that list:
   '?           Logical negation
               The result is a list containing 1 for each number that divides
               the argument, 0 otherwise
+              Take its sum

QBasic, 51 41 bytes

INPUT n
FOR i=2TO n
f=f-(n/i=n\i)
NEXT
?f

-10 bytes by copying the approach from Darren Smith's Nibbles answer: For a prime power input, the desired output equals the number of integers between 1 (exclusive) and the input (inclusive) that evenly divide the input.

INPUT number
FOR testFactor = 2 TO number
  ' number is divisible by testFactor if their float division equals
  ' their int division
  isDivisible = (number / testFactor = number \ testFactor)
  ' Truthy is -1 in QBasic, so we subtract rather than add to the tally
  numFactors = numFactors - isDivisible
NEXT testFactor
PRINT numFactors

Husk, 2 bytes

Lp

Try it online!

Explanation

Lp
L  length of
 p prime factors

Add++, 42 bytes

D,f,@,bUbU$^=
L,dVfbUG$XGRzGGXzÞ{f}bUbU0$:

Try it online!

I don't even know where to begin explaining this mess.

Explained

D,f,@,bUbU$^=
D,f,@,        ; a helper function f that given a list [number, [x, y]]
      bUbU$^  ;   returns whether x ^ y
            = ;   equals number

L,dVfbUG$XGRzGGXzÞ{f}bUbU0$:
L,                            ; a lambda that
  dV                          ; places its input into the register
    fbU                       ; and gets the prime factor of the input. This is guaranteed to be a single item because the input is a prime raised to a power.
       G$X                    ; push a list of input copies of that power
          GRz                 ; and zip that with the range [1...input]
             GGX              ; also, push input copies of the input
                z             ; and zip that with our big list. I'm calling it a big list because it is what it is.
                 Þ{f}         ; filter that list based on the results of the helper function f
                     bUbU0$:  ; get the power out of the many nested lists returned.

Vyxal l, 1 byte

ǐ

Try it Online!

-1 byte thx to @lyxal

Length of the prime factors, the flags are cheaty+awesome

Excel, 34 bytes

=SUM((MOD(A1,SEQUENCE(A1-1))=0)*1)

Link to Spreadsheet

Counts the factors. Works up to 2 ^ 20.

Factor + math.primes.factors, 18 bytes

[ factors length ]

Try it online!

Retina 0.8.2, 30 bytes

.+
$*
((?=(1+)(\2+)$)\3)+1
$#1

Try it online! Link includes test cases. Explanation:

.+
$*

Convert the input to unary.

((?=(1+)(\2+)$)\3)+1

Repeatedly find the largest factor of the current value. Eventually this becomes 1, which is then matched at the end outside of the loop.

$#1

Output the resulting number of factors, which for a prime power will be the power.

Julia, 19 bytes

port of Xi'an's answer in R

n->sum(n.%(2:n).<1)

Try it online!

APL (Dyalog Extended), 8 2 bytes

≢⍭

Try it online!

finds factors, counts how many of them there are.

R 22 bytes

Power n is the number of multiples of p in p^n when p is prime:

sum(!(b<-scan())%%2:b)

Try it online!

F#, 91 bytes

let rec d n c v=if v=n then c else d(n/v)(c+1)v
let p n=d n 1(Seq.find(fun x->n%x=0){2..n})

Try it online!

p gets the prime factor. d recursively divides the target value until it's equal to the prime factor and returns the count from that.

JavaScript (Node.js), 29 bytes

f=(n,k=n)=>--k&&!(n%k)+f(n,k)

Try it online! Note: Stack overflows for larger inputs.

Perl 6, 18 bytes

{+grep($_%%*,^$_)}

Try it online!

Anonymous code block that gets a list of factors and coerces it to a number.

Racket, 31 bytes

(car(cdr(perfect-power(read))))

Try it online!

Brachylog, 2 bytes

ḋl

Try it online!

Explanation

ḋ        Prime decomposition
 l       Length

Pari/GP, 8 bytes

bigomega

Try it online!

bigomega(x): number of prime divisors of x, counted with multiplicity.


Pari/GP, 14 bytes

n->numdiv(n)-1

Try it online!

Cjam, 5 bytes

rimf,

Try it Online!

Explanation:

ri      take the input and convert it to an int
  mf    factors the input
    ,   take the length of the list

Builtins are great!

Perl 6, 36 bytes

{round .log/log (2..*).first: $_%%*}

Looks for the first factor (2..*).first: $_%%*, then from there calculates the approximate value (logs won't get it exact) and rounds it.

Try it online!

Bash + GNU utilities, 22

factor|tr -cd \ |wc -c

Try it online!

Whitespace, 141 bytes

[S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_number][T    T   T   _Retrieve][S S S T  N
_Push_1][N
S S N
_Create_Label_LOOP_1][S S S T   N
_Push_1][T  S S S _Add][S N
S _Duplicate][S T   S S T   S N
_Copy_2nd_input][S N
T   _Swap_top_two][T    S T T   _Modulo][N
T   S S N
_If_0_Jump_to_Label_BREAK_1][N
S N
N
_Jump_to_Label_LOOP_1][N
S S S N
_Create_Label_BREAK_1][S S S N
_Push_0][S T    S S T   S N
_Copy_2nd_input][N
S S T   N
_Create_Label_LOOP_2][S N
S _Duplicate_input][S S S T N
_Push_1][T  S S T   _Subtract][N
T   S S S N
_If_0_Jump_to_Label_BREAK_2][S N
T   _Swap_top_two][S S S T  N
_Push_1][T  S S S _Add][S N
T   _Swap_top_two][S T  S S T   S N
Copy_2nd_factor][T  S T S _Integer_divide][N
S N
T   N
_Jump_to_Label_LOOP_2][N
S S S S N
_Create_Label_BREAK_2][S N
N
_Discard_top][T N
S T _Print_as_number]

Letters S (space), T (tab), and N (new-line) added as highlighting only.
[..._some_action] added as explanation only.

Try it online (with raw spaces, tabs and new-lines only).

Explanation in pseudo-code:

Integer n = STDIN as input
Integer f = 1
Start LOOP_1:
  f = f + 1
  if(n modulo-f == 0)
    Call function BREAK_1
  Go to next iteration of LOOP_1

function BREAK_1:
  Integer r = 0
  Start LOOP_2:
    if(n == 1)
      Call function BREAK_2
    r = r + 1
    n = n integer-divided by f
    Go to next iteration of LOOP_2

function BREAK_2:
  Print r as number to STDOUT
  Program stops with an error: Exit not defined

Example run: input = 9

Command    Explanation                    Stack           Heap    STDIN   STDOUT   STDERR

SSSN       Push 0                         [0]
SNS        Duplicate top (0)              [0,0]
TNTT       Read STDIN as number           [0]             {0:9}   9
TTT        Retrieve                       [9]             {0:9}
SSSTN      Push 1                         [9,1]           {0:9}
NSSN       Create Label_LOOP_1            [9,1]           {0:9}
 SSSTN     Push 1                         [9,1,1]         {0:9}
 TSSS      Add top two (1+1)              [9,2]           {0:9}
 SNS       Duplicate top (2)              [9,2,2]         {0:9}
 STSSTSN   Copy 2nd from top              [9,2,2,9]       {0:9}
 SNT       Swap top two                   [9,2,9,2]       {0:9}
 TSTT      Modulo top two (9%2)           [9,2,1]         {0:9}
 NTSSN     If 0: Jump to Label_BREAK_1    [9,2]           {0:9}
 NSNN      Jump to Label_LOOP_1           [9,2]           {0:9}

 SSSTN     Push 1                         [9,2,1]         {0:9}
 TSSS      Add top two (2+1)              [9,3]           {0:9}
 SNS       Duplicate top (3)              [9,3,3]         {0:9}
 STSSTSN   Copy 2nd                       [9,3,3,9]       {0:9}
 SNT       Swap top two                   [9,3,9,3]       {0:9}
 TSTT      Modulo top two (9%3)           [9,3,0]         {0:9}
 NTSSN     If 0: Jump to Label_BREAK_1    [9,3]           {0:9}
NSSSN      Create Label_BREAK_1           [9,3]           {0:9}
SSSN       Push 0                         [9,3,0]         {0:9}
STSSTSN    Copy 2nd from top              [9,3,0,9]       {0:9}
NSSTN      Create Label_LOOP_2            [9,3,0,9]       {0:9}
 SNS       Duplicate top (9)              [9,3,0,9,9]     {0:9}
 SSSTN     Push 1                         [9,3,0,9,9,1]   {0:9}
 TSST      Subtract top two (9-1)         [9,3,0,9,8]     {0:9}
 NTSSSN    If 0: Jump to Label_BREAK_2    [9,3,0,9]       {0:9}
 SNT       Swap top two                   [9,3,9,0]       {0:9}
 SSSTN     Push 1                         [9,3,9,0,1]     {0:9}
 TSSS      Add top two (0+1)              [9,3,9,1]       {0:9}
 SNT       Swap top two                   [9,3,1,9]       {0:9}
 STSSTSN   Copy 2nd from top              [9,3,1,9,3]     {0:9}
 TSTS      Integer-divide top two (9/3)   [9,3,1,3]       {0:9}
 NSNTN     Jump to Label_LOOP_2           [9,3,1,3]       {0:9}

 SNS       Duplicate top (3)              [9,3,1,3,3]     {0:9}
 SSSTN     Push 1                         [9,3,1,3,3,1]   {0:9}
 TSST      Subtract top two (3-1)         [9,3,1,3,2]     {0:9}
 NTSSSN    If 0: Jump to Label_BREAK_2    [9,3,1,3]       {0:9}
 SNT       Swap top two                   [9,3,3,1]       {0:9}
 SSSTN     Push 1                         [9,3,3,1,1]     {0:9}
 TSSS      Add top two (1+1)              [9,3,3,2]       {0:9}
 SNT       Swap top two                   [9,3,2,3]       {0:9}
 STSSTSN   Copy 2nd from top              [9,3,2,3,3]     {0:9}
 TSTS      Integer-divide top two (3/3)   [9,3,2,1]       {0:9}
 NSNTN     Jump to Label_LOOP_2           [9,3,2,1]       {0:9}

 SNS       Duplicate top (1)              [9,3,2,1,1]     {0:9}
 SSSTN     Push 1                         [9,3,2,1,1,1]   {0:9}
 TSST      Subtract top two (1-1)         [9,3,2,1,0]     {0:9}
 NTSSSN    If 0: Jump to Label_BREAK_2    [9,3,2,1]       {0:9}
NSSSSN     Create Label_BREAK_2           [9,3,2,1]       {0:9}
 SNN       Discard top                    [9,3,2]         {0:9}
 TNST      Print as integer               [9,3]           {0:9}           2
                                                                                    error

Program stops with an error: No exit found.

Jelly, 3 2 bytes

Æḍ

Try it online!

JavaScript (ES6), 37 bytes

f=(n,k=2)=>n%k?n>1&&f(n,k+1):1+f(n/k)

Try it online!

Python 2, 37 bytes

f=lambda n,i=2:i/n or(n%i<1)+f(n,i+1)

Try it online!

Counts factors. Apparently I wrote the same golf in 2015.

Narrowly beats out the non-recursive

Python 2, 38 bytes

lambda n:sum(n%i<1for i in range(1,n))

Try it online!

Octave, 18 bytes

@(x)nnz(factor(x))

Try it online!

Does what it says on the tin: Number of non-zero elements in the prime factorization of the input.

MATL, 3 bytes

Yfz

Try it online!

Explanation:

     % Implicit input: 59049
Yf   % Factorize input [3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
  z  % Number of non-zero elements: 10
     % Implicit output

Stax, \$\require{cancel}\xcancel 4 3\$ bytes

|f%

Run and debug it

Length of prime factorization.

Haskell, 27 bytes

f n=sum$(0^).mod n<$>[2..n]

Try it online!

Counts factors. Compare:

Haskell, 28 bytes

f n=sum[1|0<-mod n<$>[2..n]]

Try it online!

Haskell, 28 bytes

f n=sum[0^mod n i|i<-[2..n]]

Try it online!

Haskell, 30 bytes

f n=sum[1|i<-[2..n],mod n i<1]

Try it online!

Gaia, 2 bytes

ḍl

Try it online!

Attache and Wolfram Language (Mathematica) polyglot, 10 bytes

PrimeOmega

Try Attache online! Try Mathematica online!

Simply a builtin for computing the number of prime factors N has.

Explanation

Since N = pk, Ω(N) = Ω(pk) = k, the desired result.

face, 86 bytes

(%d@)\$*,c'$,io>Av"[""mN*c?*m1*mp*m%*s1"$pN1p:~+p1p%%Np?%~:=/NNp+?1?-%N1?%=p%'$i?w1'%>

Hooray, longer than Java!

Try it online!

I am particularly fond of the trick of using the return value of sscanf. Normally the return value would be discarded, but here it will always be 1, because we're always reading a single number as input. We can take advantage of this by assigning its return value to the variable 1, saving the 2 bytes that would otherwise be required to assign 1 to 1 explicitly.

(%d@)

\$*,c'$,io>  ( setup - assign $ to "%d", * to a number, o to stdout )
Av"[""mN*    ( set " to input and allocate space for N for int conversion )
c?*          ( calloc ?, starting it at zero - this will be the output )
m1*          ( allocate variable "1", which gets the value 1 eventually )
mp*m%*       ( p is the prime, % will be used to store N mod p )

s1"$pN       ( scan " into N with $ as format; also assigns 1 to 1 )

1p:~         ( begin loop, starting p at 1 )
  +p1p       ( increment p )
  %%Np       ( set % to N mod p )
?%~          ( repeat if the result is nonzero, so that we reach the factor )

:=           ( another loop to repeatedly divide N by p )
  /NNp       ( divide N by p in-place )
  +?1?       ( increment the counter )
  -%N1       ( reuse % as a temp variable to store N-1 )
?%=          ( repeat while N-1 is not 0 -- i.e. break when N = 1 )

p%'$i?       ( sprintf ? into ', reusing the input format string )
w1'%>        ( write to stdout )

Pyth, 2

Count prime factors:

lP

Online test.

R, 37 bytes

length(numbers::primeFactors(scan()))

Try it online!

Actually, 2 bytes

ol

Try it online!

J, 4 bytes

#@q:

q: gives the list of prime factors, # gives the length of the list.

Try it online!

dc, 50 41 bytes

1si[dli1+dsi%0<X]dsXx[dli/dli<Y]sYdli<Yzp

Try it online!

Takes input from the top of the stack (in TIO, put the input in the header to load it onto the stack before execution). Outputs to stdout.

Explanation

Registers used:

i: the current trial divisor, while X is running. Later, the divisor we've found.

X: the macro dli1+dsi%0<X, which has the effect "increment i, then check the modulus with the value on the stack (which will be the original input). If it's not zero, repeat".

Y: the macro dli/dli<Y, which has the effect "Add to the stack a copy of the current top of the stack, divided by i. Repeat until i is reached."

Full program:

1si                 Initialize i
[dli1+dsi%0<X]dsXx  Define and run X
[dli/dli<Y]sY       Define Y
dli<Y               Run Y, but only if needed (if the input wasn't just i)
z                   The stack is i^n, i^(n-1), ... ,i, so print the stack depth

Japt, 3 bytes

k l

Try it online!

Explanation:

k l
k     Get the prime factors of the input
  l   Return the length

Java 8, 59 bytes

A lambda from int to int.

x->{int f=1,c=0;while(x%++f>0);for(;x>1;c++)x/=f;return c;}

Try It Online

Python 3, 49 bytes

f=lambda n,x=2:n%x and f(n,x+1)or n/x<2or-~f(n/x)

Try it online!

Outputs True instead of 1 (as allowed by OP). Recursive function that repeatedly finds the lowest factor and then calls the function again with the next lowest power until it reaches 1. This is an extension of my answer to the previous question.

05AB1E, 2 bytes

Òg

Try it online!

Python 2, 62 bytes

def f(n,p=2,i=0):
	while n%p:p+=1
	while n>p**i:i+=1
	return i

Try it online!

Nothing fancy here.