Search code examples
actionscript-3flashprimesfactorizationfactors

Prime factorization with Actionscript 3


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);
}

Solution

  • 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