2013-05-27 4 views
0

저는 수학 문제를 찾고있었습니다. 많은 수의 요인을 찾아야했습니다. "나는 프라임 분해 (prime factorization)"라는 방법으로 PHP에 코드를 작성했다. 그렇다면 숫자 196 (1, 2, 4, 7, 14, 28, 49, 98, 196)의 요소를 알고 싶다고 말하면,이 숫자의 소수 분해는 다음과 같습니다. (2^2) (7^2). PHP가 지수와 조합 할 때

이 요소를 찾으려면, 당신은 둘 사이의 모든 가능한 조합을 만들고 그들을 muttiply해야합니다 : 내가 붙어있어 어디

(2^0)(7^0) = 1 
(2^1)(7^0) = 2 
(2^2)(7^0) = 4 
(2^0)(7^1) = 7 
(2^1)(7^1) = 14 
(2^2)(7^1) = 28 
(2^0)(7^2) = 49 
(2^1)(7^2) = 98 
(2^2)(7^2) = 196 

이입니다. 이 항목들의 조합을 만드는 함수를 찾아야합니다 (지수는 그 수의 소수 분해입니다). 이 함수는 N 개의 요소 (N은 0보다 크고 100보다 작음)에서 작동해야합니다.

내 문제를 이해하고 해결 방법에 대한 아이디어가 있기를 바랍니다.

+0

그럼 언제나 2s와 7s에 해당하는 숫자와 관련이 있습니까? 그렇다면 반복 횟수는 항상 3N이므로 계산은 매우 사소합니다. – Sammitch

+0

일부 연구를 수행 한 적이 있습니까? 나는 그렇게 생각하지 않는다. http://stackoverflow.com/questions/14037688/find-the-highest-prime-number-in-a-given-range/14037923#14037923 http://stackoverflow.com/questions/15820112/project-euler-3 -finding-prime-factors http://www.calculatorsoup.com/calculators/math/gcf.php#.UaO7wUDiKzQ – Robert

답변

0

다음은 지수의 수와 함께 $N = '196'의 소수 요소를 인쇄합니다.

<?php 
    function is_prime($N) { 
     if($N == 2) return true; 
     for($i = 3 ; $i * $i <= $N; $i++) { 
      if($N % $i == 0) return false; 
     } 
     return true; 
    } 
    $a = array(); 
    $N = '196'; 
    for($i = 2; $i <= $N; $i++) { 
     while($N % $i == 0 && is_prime($i)) { 
      if(!isset($a[$i])) { 
       $a[$i] = 0; 
      } 
      $a[$i]++; 
      $N = $N/$i; 
     } 
    } 
    print_r($a); 
?>