【发布时间】: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