Primes
A (lengthly) solution to http://www.codewars.com/kata/534a0c100d03ad9772000539
by Kyle Falconer
JavaScript
// http://www.codewars.com/kata/534a0c100d03ad9772000539
function PrimeFactorizer(n) {
//your code here
this.factor = (function (n) {
var factorization = {};
var current = n;
var limit = Math.sqrt(n);
var p = Math.floor(limit);
//window.console.log('Factoring ' + n);
while (p >= 1) {
p = prevPrime(p);
//window.console.log('Trying ' + p);
while (current % p === 0) { // divisible by p
//window.console.log(current + ' is divisible by ' + p);
if (factorization[p + '']) {
factorization[p + ''] = factorization[p + ''] + 1;
} else {
factorization[p + ''] = 1;
}
if (current == current / p) {
return factorization;
}
current = current / p;
}
if (current == 1) {
return factorization;
} else if (isPrime(current)) {
factorization[current + ''] = 1;
return factorization;
}
}
return factorization;
})(n);
function prevPrime(p) {
var np = p;
if (p == 2) {
return 1;
}
while (p > 1) {
np--;
if (isPrime(np)) {
return np;
}
}
}
function isPrime(n) {
// borrowed from http://en.wikipedia.org/wiki/Primality_test
if (n <= 3) {
return n > 1;
}
if (n % 2 === 0 || n % 3 === 0) {
return false;
}
for (var i = 5; i * i <= n; i += 6) {
if (n % i === 0 || n % (i + 2) === 0) {
return false;
}
}
return true;
}
}
window.console.log(new PrimeFactorizer(13).factor);