使用Actionscript 3进行素数分解

时间:2014-12-09 09:08:20

标签: actionscript-3 flash primes factorization factors

我目前正在尝试制作一个能够对任何给定数字进行分解的程序,但我遇到了一些问题。我已经编写了一个生成第一个x素数的程序,我想我可以使用这个程序来解决我以前的任务。

我遇到的问题是该程序只能对小数进行分解。当我为var tall输入更高的数字时,答案是错误的。有没有人建议如何使程序正常工作?

我是该语言的新手,我相信它可以更有效地编写代码。

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

1 个答案:

答案 0 :(得分:0)

试试这个:

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