2013-02-24 10 views
0

Это программа для поиска простых коэффициентов чисел.Как найти простые множители в диапазоне в php

Как - Prime факторы для числа 1125 являются 3 и 5

Мой Algo это идет путь - (и, пожалуйста, дайте мне знать, если это не правильно)

  1. Во-первых, я найти квадратный корень от числа, использующего функцию sqrt() , чтобы разрушить сложность и время выполнения.
  2. Чтобы найти простые числа между диапазонами.
  3. Наконец, чтобы разделить эти простые числа с оригинальным номером (еще не дошел до этой стадии, как неудача на втором этапе.

Моего код, который не работает, дайте мне знать, где именно я терплю неудачу в моем логика и код, начиная с шага 2 и шага 3.

ошибки не выброшен, но код также ничего не выводит.

<?php 
error_reporting(E_ALL); 
$number = 6006; 

$sqrt_num = (int)sqrt($number); 

for($i=2;$i<$sqrt_num;$i++) 
{ 
    for($j=2;$j<=$i-1;$j++) 
    { 
     if($i%$j==0) 
     break; 
     if($i==$j) 
      echo $i; 
    } 
} 
+0

http://stackoverflow.com/a/14037923/1270996 Возможный дубликат –

+1

Во-первых, по логике вещей, вы не проверки простых чисел, вы проверяете «делится на», во-вторых, вы 'break' из цикла, а не' continue' на следующую итерацию. Взгляните на: http://www.thatsgeeky.com/2011/03/prime-factoring-with-php/ – Jon

+0

Вы можете найти свое решение здесь: http://stackoverflow.com/questions/14037688/find-the-maximum-prime-number-in-a-given-range – xubi

ответ

0

Нахождение простых чисел является общей проблемой в м ost языки программирования. Сначала взгляните на number is prime. Вы можете использовать функцию gmp_nextprime.

+1

Он действительно ищет основные факторы. –

+0

Для основного фактора взгляните на http://www.thatsgeeky.com/2011/03/prime-factoring-with-php/ – user1929959

+0

@ user1929959 Спасибо за ссылку .. но на самом деле меня больше интересует поиск ошибки в моем собственный код ... не найден Я со своей стороны прошу логическую помощь здесь :) – swapnesh

1

Поскольку я уверен, что если вам нужны простые коэффициенты числа или все простые числа в диапазоне от 1 до sqrt (число), я дам вам часть моего кода, который я написал некоторое время назад, показать различные варианты реализации: (., и вы можете увидеть логику, используемую для воссоздания собственного ^^)

//Check if a number is prime 
function isPrime($num, $pf = null) 
{ 
    if(!is_array($pf)) 
    { 
     for($i=2;$i<intval(sqrt($num));$i++) { 
      if($num % $i==0) { 
       return false; 
      } 
     } 
     return true; 
    } else { 
     $pfCount = count($pf); 
     for($i=0;$i<$pfCount;$i++) { 
      if($num % $pf[$i] == 0) { 
       return false; 
      } 
     } 
     return true; 
    } 
} 

//Find Prime Factors 
function primeFactors($num) 
{ 
    //Record the base 
    $base = intval($num/2); 
    $pf = array(); 
    $pn = null; 
    for($i=2;$i <= $base;$i++) { 
     if(isPrime($i, $pn)) { 
      $pn[] = $i; 
      while($num % $i == 0) 
      { 
       $pf[] = $i; 
       $num = $num/$i; 
      } 
     } 
    } 
    return $pf; 
} 

того, чтобы получить простые множители, просто использовать $myarr = primeFactors($number);

Если вы хотите, чтобы все простые числа диапазон:

for($i=1;$i<$sqrt_num;$i++) { 
    if(isPrime($i)) { 
     $myarr[] = $i; 
    } 
} 

Я хочу отметить использование $pf в isPrime, так как это сито, чтобы сократить время обработки, чтобы узнать, является ли число простым на основе уже обработанных основных факторов.

+0

На самом деле мой код был частью. Я искал основные коэффициенты числа, и это число очень велико, поэтому я разбиваю, что число по моему sqrt() возвращаемому значению, а затем поиск простых чисел от 1 до sqrt_number ..... и я был потерян в поиске простого числа от 2 до sqrt_number – swapnesh

+0

@swapnesh ahh, ok! ^^ Для этого вам нужно знать, что вам нужно перейти к '$ number/2', так как' sqrt ($ number) 'слишком мал. Например, число '102012' в качестве основных факторов' 2,2,3,8501' и остановка на 'sqrt ($ number)' никогда не дадут вам фактор '8501'. ^^ – Jon

0
$namber = 1122676330; 
$text = $namber.'='; 
$time_start = microtime(1); 

for($i=2; $i<=$namber; $i++){ 
    if($namber % $i == 0){ 
     $namber = $namber/$i; 
     $text .= $i. ' '; 
     $i--; 
    } 
    if($namber == 1){ 
      echo 'ok'; 
     } 
} 

$time_end = microtime(1); 
$time = $time_end - $time_start; 
echo "<br><br>$text<br><br> $time seconds\n"; 
+0

Это может ответить на вопрос (я не парень PHP), но некоторые объясняют, почему это работает с комментариями и текстом. Теперь это всего лишь фрагмент кода. – VDWWD

0

вы можете использовать класс PHP на PrimeModule

PHP премьер модуль, способный делать простые множители огромных чисел очень быстро.

ссылка: https://github.com/danog/PrimeModule

Смежные вопросы