miércoles, 12 de octubre de 2011

Números Casi Primos (Almost Primes Numbers)

Los números casi primos son número no-primos que son
divisibles por solo un número primo. En este problema tu
trabajo es escribir un programa que encuentre la cantidad
de número casi primos dentro de cierto rango.
Entrada
La primera línea de la entrada contiene un entero N (N<=
600) que indica cuantos sets de datos siguen. Cada una de
las siguientes N líneas es un set de entrada. Cada set
contiene dos número enteros low y high (0 < low<= high <
1012).
Salida
Por cada línea de entrada excepto la primera usted debe
producir una línea de salida. Esta línea contendrá un entero,
que indica cuantos números casi primos hay dentro del
rango(incluyendo) low . . . high.
Ejemplo de entrada
3
1 10
1 20
1 5
Ejemplo de salida
3
4
1
Solución (en php):
<?php
$n=str_replace("\n", "", fgets(STDIN));
//$n=3;
for ($i=0;$i<$n;$i++)
{
  $sequence=str_replace("\n", "", fgets(STDIN));
  list($ini,$fin)=explode(" ",$sequence);
  $z=0;
  for($j=$ini;$j<=$fin;$j++)
  {
    if(!isPrime($j)){
      if (almostPrime($j))
      {
        $z++;
      }
    }
  }
  //echo $ini;
  //echo $fin;
  echo $z."\n";
}
function isPrime($num)
{
  $cont = 0;
  for($i = 1; $i <= $num; $i++){
    //echo 3/2.”<br>”;
    if($num % $i == 0){
      //echo “$i <br>”;
      $cont++;
    }
  }
   
  if($cont==2){
    return true;
  }else{
    return false;
  }
}
function almostPrime($num)
{
  $cont =0;
  for($i = 1; $i <= $num; $i++){
    if (isPrime($i)){
      if ($num%$i == 0){
        $cont++;
      }
    }
  }
  if($cont==1){
    return true;
  }else{
    return false;
  }
}
?>

No hay comentarios:

Publicar un comentario