I am currently trying to make a program which is able to prime factorize any given number, but I am having some problems. I have already coded a program which generates the first x primes, and I thought I could use this program to solve my former task.
The problem I encounter is that the program can only prime factorize small numbers. When I input a higher number for var tall
, the answer is wrong. Does anyone have a suggestion on how I can get the program to work properly?
I am new to the language, and I am sure its possible to write the code much more effective.
import flash.events.MouseEvent;
factorize.addEventListener(MouseEvent.CLICK, func1);
var primeNumbers: Array = new Array(2, 3); //the first primal numbers
var maxNum = 100;
function check(num) {
for (var i = (num - 1); i > 1; i--) {
if ((num % i) == 0) {
return false;
}
}
return true;
}
var lastNum: int = primeNumbers[primeNumbers.length - 1];
var nextNum: int = lastNum + 1;
while (primeNumbers.length < maxNum) {
if (check(nextNum) == true) {
primeNumbers.push(nextNum);
nextNum++;
} else nextNum++;
}
trace(primeNumbers);
function func1 (evt:MouseEvent) { //factorizing function
var tall:int = 18; //the number i want i factorize
var num:int = 0;
var factor:Array = new Array();
while (num<tall) {
while (int(tall/primeNumbers[num]) == tall/primeNumbers[num]) {
trace(tall+"/"+primeNumbers[num]+"="+tall/primeNumbers[num])
factor.push(primeNumbers[num]);
var next = tall/primeNumbers[num];
while (int(next/primeNumbers[num]) == next/primeNumbers[num]) {
factor.push(primeNumbers[num])
trace(next+"/"+primeNumbers[num]+"="+next/primeNumbers[num])
var next2 = next/primeNumbers[num];
while (int(next2/primeNumbers[num]) == next2/primeNumbers[num]) {
factor.push(primeNumbers[num])
trace(next2+"/"+primeNumbers[num]+"="+next2/primeNumbers[num])
var next2 = next/primeNumbers[num];
while (int(next2/primeNumbers[num]) == next2/primeNumbers[num]) {
factor.push(primeNumbers[num])
trace(next2+"/"+primeNumbers[num]+"="+next2/primeNumbers[num])
num++;
}
num++;
}
num++;
}
num++;
}
num++;
}
trace(tall + " = " + factor);
}
Try this :
function prime_factorization( n:int ): Array {
var a:Array = [] ;
for (var i:int = 2; i <= n / i; i++) {
while (n % i == 0) {
a.push(i) ;
n = n / i ;
}
}
if (n > 1) a.push(n) ;
return a ;
}
trace(prime_factorization(12)) ; // gives : 2,2,3
trace(prime_factorization(288)) ; // gives : 2,2,2,2,2,3,3
trace(prime_factorization(35206)) ; // gives : 2,29,607