2014-11-13 2 views
-1

Как написать код для генератора простых чисел, используя указанный интерфейс.Простые номера с использованием интерфейса

+0

вам нужно сегментированное сито –

+1

почему это помечено C? –

+2

Мне немного непонятно, что вы просите. И это не похоже на JavaScript, PHP или C. Неясно, на каком языке он вообще. –

ответ

1

Я думаю, это то, что вы просили.

int isPrime(int i) { 
    int j; 
    if(i == 1 || i == 2) 
      return 1; 
    if(i % 2 == 0) 
      return 0; 

    for (j = 3; j < sqrt(n); j += 2) 
      if (i % j == 0) 
        return 0; 

    return 1; 
} 

void generator(int start, int end) { 
    int i; 
    if(start > end) { 
      int temp = start; 
      start = end; 
      end = start; 
    } 

    for (i = start; i<=end; i++) 
      if(isPrime(i)) 
        printf("%d\n", i); 
} 

int main() { 
    generator(7900, 7920); 
    return 0; 
} 
+0

Спасибо, что поделились этим venkatesh – Arun

+0

Сначала, если в генераторе() для вашего первого ограничения. Я меняю начальные и конечные значения, если они начинаются больше, чем конец (case start = 10, end = 1), а затем он переходит из начального значения в конец и проверяет, что каждое значение является простым или нет. – Venkatesh

+0

Вы хотите, чтобы я объяснил isPrime()? – Venkatesh

0

Здесь он делает забавную вещь в конце, но она работает. Вы можете увидеть его в действии здесь http://operationwalrus.com/primeval.php?x=1&y=100

<? 
$x = $_GET['x']; 
$y = $_GET['y']; 
//$x and $y must be ordered acendingly 
if ($x > $y) { 
    $temp = $x; 
    $x = $y; 
    $y = $temp; 
} 
$num = range($x, $y); 
sort($num); 
$arr = (findPrimeValues($num, $x, $y)); 
$arr = array_values(array_filter($arr)); 
for ($i=0;$i <= $y+1;$i++) { 
    $prnt = $arr[$i] . ', '; 
    str_replace(', ,', "",$prnt); 
    print_r($prnt); 
} 
function findPrimeValues($num, $x, $y) { 
    //1 is not prime. See: http://en.wikipedia.org/wiki/Prime_number#Primality_of_one 
    $pos = array_search(1, $num); 
    if (is_int($pos)) { 
     unset($num[$pos]); 
    } 

    /** 
    * if a number in the range is divisible by two and its not two, then it's 
    * not prime and it's removed from the array. 
    */ 
    for ($i=$x;$i <= $y;$i++) { 
     if (($i !== 2) && ($i % 2 == 0)) { 
      $pos = array_search($i, $num); 
      unset($num[$pos]); 
     } 
    } 

    /** 
    * Checks the odd numbers. If any of them is a factor, then it returns false. 
    * The sqrt can be an aproximation, hence just for the sake of 
    * security, one rounds it to the next highest integer value. 
    * $u is the number we are testing against. 
    */ 
    for ($u=$x;$u <= $y; $u++) { 
     for ($i = 3; $i <= ceil(sqrt($u)); $i = $u + 2) {  
      if($u % $i == 0) { 
       $pos = array_search($u, $num); 
       unset($num[$pos]); 
      } 
     } 
    } 
    return($num); 
} 
+0

'$ x = $ _GET ['x']; $ y = $ _GET ['y']; 'изменить их на' $ x = number; $ y = number; ' –

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