Recursive prime factors
HTML
<div>Enter a number to get it's prime factors:</div>
<input id="number" maxlength="17" style="width: 150px;" type="text" value=""></input>
<div id="result"></div>
JavaScript
function primeFactorization(num){
var root = Math.sqrt(num),
result = arguments[1] || [], //get unnamed paremeter from recursive calls
x = arguments[2] || 2;
if(x === 2 && num % x){//if not divisible by 2
x = 3;//assign first odd
}
while((num % x) && ((x = x + 2) < root)){}//iterate odds
//if no factor found then num is prime
x = (x <= root) ? x : num;
result.push(x);//push latest prime factor
//if num isn't prime factor make recursive call
return (x === num) ? result : primeFactorization(num/x, result, x) ;
}
function ValidateResult(origText, result){
var index, total = 1;
for(index = 0; index < result.length; index++){ total = total * result[index];}
return (origText === total.toString()) ? result : "Error: Factoring did not validate";
};
$('#number').keyup(function(){
var result, tbresult = $('#result') ;
var numText = $('#number').val();
var num = Math.abs(parseFloat(numText,50));//note around 15 or 16 digits this begins to fail, e.g. "10000000000000001" == 10000000000000000
if(numText != num.toString()){
tbresult.html("Error: Text is too large to be represented accurately or is otherwise not a valid number");
}
else{
result = primeFactorization(num);
result = ValidateResult(numText, result);
tbresult.html(result.toString());
}
});