R

E

A

C

T

O

xamples 

epeat

ode

pproach

ptimize

est

{Prime Factors}

The Problem

Given a positive number n (n > 0) find the prime factor decomposition of n. The result will be a string with the following form :

 "(p1**n1)(p2**n2)...(pk**nk)"

 

(p1**n1)

Prime factor

# of occurrences

IMPORTANT NOTES: 

- Prime factors should be returned in increasing order

- If a factor only occurs once, it should be represented   as "(p)" rather than "(p**1)"

Tests to Run

Input: 86240
Output: "(2**5)(5)(7**2)(11)"

Input: 80
Output: "(2**4)(5)" 

Input: 25
Output: "(5**2)"

Input: 293
Output: "(293)"
function primeFactor(n) {
    var repeats = 0,
        dividedNum = n,
        sqRoot = Math.sqrt(n);
    for (i = 2; i <= sqRoot; i++) {
        if (i % 2 || i === 2) {
            if (dividedNum % i === 0) {
                while (dividedNum % i === 0) {
                    repeats++;
                    dividedNum = dividedNum/i;
                }
                if (dividedNum === 1) return stringIt(i, repeats);
                else return stringIt(i, repeats) + primeFactor(dividedNum);
            }         
        }
    }
    return "(" + n + ")";
}

function stringIt(factor, repeats) {
    if (repeats === 1) {
        return "(" + factor + ")";
    } else {
        return "(" + factor + "**" + repeats + ")";
    }
}


// I refactored the function to be recursive. See next slide for Omri's solution,
// which also uses recursion.

Solution 1

function format (factors) {
    return factors.reduce(function (arr, n) {
        arr[n] = 1 + (arr[n] || 0);
        return arr;
    },[]).reduce(function (result, amount, n) {
        var amountFormat = amount < 2 ? '' : '**' + amount;
        return result + '(' + n + amountFormat + ')';
    }, '');
}

function primeFactors (n) {
    var root = Math.sqrt(n);
    for (var x = 2; x <= root; x++) {
        if (n % x === 0) {
            return [x].concat(primeFactors(n/x));
        }
    }
    return [n];
}

function theThing (n) {
    return format(primeFactors(n));
}

Solution 2

Reacto: Prime Factors

By Katie Peters

Reacto: Prime Factors

  • 1,574