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