2014-12-09 4 views
1

현재 주어진 수를 인수 분해 할 수있는 프로그램을 만들려고하고 있지만 몇 가지 문제가 있습니다. 나는 이미 첫 번째 x 소수를 생성하는 프로그램을 코딩했고, 나는이 프로그램을 사용하여 나의 이전 작업을 해결할 수 있다고 생각했다.Actionscript 3 프라임 인수 분해

내가 마주 치게되는 문제는 프로그램이 작은 수만 분해 할 수 있다는 것입니다. 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

당신이 예상 결과와 함께, 예를 첨부하시기 바랍니다 수있다 "대답은 잘못"? (단지 명료 함을 위해서) 또한, [Recursive Functions] (http://www.designswan.com/archives/as3-recursive-functions-vs-loop-functions.html)를 살펴볼 수도 있습니다. 계승 계산. – DodgerThud

+0

답변 해 주셔서 감사합니다! 변수 (var tall)가 6, 12 또는 18과 같은 경우, 결과적으로 "6 = 2 * 3", "12 = 2 * 2 * 3"등이됩니다. var tall = 288이면 출력은 "288 = 2 * 2 * 2 * 2 * 3"으로 잘못되었습니다. @DodgerThud – Smeestad

+0

나는 사용하려는 방법이 거의 쓸모가 없다고 생각합니다. 많은 양의 프라임 팩터 (?)로 변수를 인수 분해 할 수 없습니다. – Smeestad

답변

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 
+0

몇 번 시도해 본 결과 코드를 수정하여 최대 400 개의 값을 인수 분해 할 수있었습니다 (원래의 작업이었습니다). 당신의 코드는 훨씬 더 효과적이었고 어떤 정수라도 인수 분해 할 수있었습니다. 고맙습니다! 그래서 여러분은 factorize를 프라임하기위한 모든 primal numbers로 구성된 배열을 필요로하지 않습니까? – Smeestad

+0

@akmozo 코드는 정확하지만 다음과 같습니다. 1. 함수에서 반환해야하는 값의 유형을 지정해야합니다 (여기에서는 Array). 2. 새 배열을 선언하려면 새 Array() 대신 Array literal을 사용하십시오. 이렇게하십시오 : [],이 아닙니다 : new Array() 3. 각 명령문을 세미콜론으로 종료하십시오. 자세한 내용은 다음을 참조하십시오. [AS3 코딩 표준] (http://wiki.opensemanticframework.org/index.php/AS3_Coding_Standards#Array_literals) – helloflash

+0

@MattisTrygstad 아니요, 모든 기본 숫자의 배열이 필요하지 않습니다. 왜냐하면 'while' 루프 작업. – akmozo