primes/prime-factor-tree.js

(function (exports) {
  'use strict';

  /**
   * Method will return list of all primes for provided number.
   * For example for number 18 it should return following list of primes
   * [2, 3, 3].
   *
   * @module primes/prime-factor-tree
   * @param {Number} number - Number for which method will find all primes.
   * @returns {Array} List of available primes for provided number.
   *
   * @example
   * var primeFactorTree = require('path-to-algorithms/src/prime-factor-tree')
   * .primeFactorTree;
   *
   * console.log(primeFactorTree(18)); // [2, 3, 3]
   * console.log(primeFactorTree(600851475143)); // [71, 839, 1471, 6857]
   */
  exports.primeFactorTree = function (number) {
    var array = [];
    var s = 6;
    while (number > 1 && number % 2 === 0) {
      number /= 2;
      array.push(2);
    }
    while (number > 2 && number % 3 === 0) {
      number /= 3;
      array.push(3);
    }
    while (number > 4) {
      var p = s - 1;
      var q = s + 1;
      while (number > 4 && number % p === 0) {
        number /= p;
        array.push(p);
      }
      while (number > 4 && number % q === 0) {
        number /= q;
        array.push(q);
      }
      s += 6;
    }
    return array;
  };

}(typeof exports === 'undefined' ? window : exports));