【问题标题】:Prime factorization with Actionscript 3使用 Actionscript 3 进行素数分解
【发布时间】:2014-12-09 09:08:19
【问题描述】:

我目前正在尝试制作一个能够对任何给定数字进行质因数分解的程序,但我遇到了一些问题。我已经编写了一个生成第一个 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);
}

【问题讨论】:

  • “答案是错误的”,你能附上一个例子,有预期的结果吗? (只是为了清楚起见)另外,您可能想查看Recursive Functions,它们通常用于阶乘计算。
  • 感谢您的回答!当我想要分解的变量(var tall)例如等于 6、12 或 18 时,我的代码因此会跟踪“6=2*3”、“12=2*2*3”等。但是如果尝试使用var tall = 288,输出为“288=2*2*2*2*3”,不正确。 @DodgerThud
  • 我认为我尝试使用的方法几乎没用,它无法分解具有大量素因数的变量(?)。

标签: actionscript-3 flash primes factorization factors


【解决方案1】:

试试这个:

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

【讨论】:

  • 经过几次尝试后,我设法修改了我的代码,以便它能够分解高达 400 的值(这是我最初的任务)。您的代码更有效,并且能够分解任何整数。谢谢!那么你不需要一个由所有原始数字组成的数组来素因数分解吗?
  • @akmozo 您的代码是正确的,但是: 1. 您应该始终指定函数应该返回的值的类型(此处:数组)。 2. 要声明一个新数组,请使用 Array 文字而不是 new Array()。这样做:[],而不是 this:new Array() 3. 用分号结束每个语句。欲了解更多信息:AS3 coding standards
  • @MattisTrygstad 不,我们不需要包含所有原始数字的数组,因为 while 循环可以完成这项工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 2011-02-22
相关资源
最近更新 更多