viernes, 25 de noviembre de 2011

Serie de Números Primos con un solo ciclo

Existen muchas formas de hallar números primos, uno de los ejercicios clásicos es tal ves generar la serie de los números primos, esto es 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, …

Ahora que tal si nos piden generar los n primeros términos de la serie de los primos, fácil no?, pero que tal si nos lo piden hacerlo con un solo ciclo repetitivo (while o for), interesante y un poco complejo, pero este algoritmo lo resuelve óptimamente con un solo ciclo repetitivo y además sencillo, véalo usted mismo su diagrama de flujo.

Serie Primos A3D
Este algoritmo es bastante bueno, es por eso que le debo mucho y te aconsejo que te lo memorices ya que te servirá de mucho si es que estas empezando con el mundo de la programación. El código Java es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Scanner e = new Scanner(System.in);
int n = e.nextInt();
int c = 1;
int p = 2;
int d = 2;
while (c <= n) {
   if (p % d == 0) {
      if (p == d) {
         System.out.print(p + ", ");
         c++;
      }
      d = 2;
      p++;
   }
   else
      d++;
}

jueves, 24 de noviembre de 2011

PHP 5 para Principiantes



Este manual no va a tratar de explicar desde cero la programación de aplicaciones del lado del servidor con PHP, pues ese asunto lo tenemos detallado en el manual de PHP [http://www.desarrolloweb.com/manuales/12/] y pensamos que merece la pena su lectura para empezar los primeros pasos en el lenguaje.

aqui el manual: http://www.cepeu.edu.py/LIBROS_ELECTRONICOS_4/manual-completo-php-5.pdf

martes, 18 de octubre de 2011

Raíz Digital Prima

Raíz Digital Prima
La raíz digital de un número es hallado adicionando todos lo dígitos en un número. Si el número resultante tiene más de un dígito, el proceso es repetido hasta temer un simple dígito.

Tu trabajo en este problema es calcular una variación de la raíz digital – una raíz digital prima. El proceso de adición descrito arriba para cuando solo queda un dígito, pero podemos para en el número original, o en cualquier número intermedio (formado por la adición) que sea número primo.

Si el proceso continúa y el resultado es un dígito que no es primo, entonces el número original no tiene raíz digital prima.
Un entero mayo que uno es llamado número primo si tiene solo dos divisores, el uno y si mismo.

· Por ejemplo, los primeros seis primos son 2, 3, 5, 7, 11, y 13.
· El número 6 tiene cuatro divisores: 6, 3, 2, y 1. Por eso 6 no es primo.
· Advertencia: en número 1 no es primo.

EJEMPLOS DE RAIZ DIGITAL PRIMA
1 Este no es un número primo, así que 1 no tiene raíz digital prima.
3 Este es un número primo, así que la raíz digital prima de 3 es 3.
4 Este no es un número primo, así que 4 no tiene raíz digital prima.
11 Este es un número primo, así que la raíz digital prima de 11 es 11.
642 Este no es un número primo, así que sumando 6 +4 + 2 = 12. Este no es un número primo, así que
sumando 1 + 2 = 3. Este si es un número primo, así que la raíz digital prima de 642 es 3.
128 Este no es un número primo, así que sumando 1 +2 + 8 = 11. Este es un número primo, así que la raíz
digital prima de 128 es 11.
886 Este no es un número primo, así que sumando 8 + 8 + 6 = 22. Este no es un número primo, así que sumando 2 + 2 = 4. Este no es un número primo, así que 886 no tiene raíz digital prima.

Entrada
La entrada contendrá un entero en cada línea en el rango
de 0 a 999999 inclusive. El fin de la entrada se indica con el
valor 0.
Salida
Si el número ingresado tiene raíz digital prima, entonces se
debe desplegar el valor original y el valor de la raíz digital
prima, caso contrario se despliega el valor original seguido
por la palabra “none”, los valores deben estar alineados con
una justificación derecha de 7 espacios, como se muestra
en el ejemplo de salida.

Ejemplo de entrada
134
11
642
128
886
0
Ejemplo de salida
1 none
3 3
4 none
11 11
642 3
128 11
886 none
Nota: la salida tiene el siguiente formato:
111111
123456789012345
4 none
642 3

SOLUCION
<?php
$num = str_replace("\n", "", fgets(STDIN));
while($num!=0){
  $raizPrima=$num;
  if ($num>1){
    if (!isPrime($num)){
      $raizPrima=raizPrima($num);
    } else {
      $raizPrima=$num;
    }
  } else{
    $raizPrima='none';
  }
  echo str_repeat(' ', 7-strlen($num)).$num.str_repeat(' ', 8-strlen($raizPrima)).$raizPrima."\n";
  $num = str_replace("\n", "", fgets(STDIN));
}
function raizPrima($num){
 $sw=true;
 $resp='none';
  while(strlen($num)>1 && $sw)  {
    $k=0;
    for($i=0;$i<strlen($num);$i++)
      $k=$k+$num[$i];
    if (!isPrime($k))
      $num=(string)$k;
    else {
      $resp=$k;
      $sw=false;
    }
  }
  return($resp);
}
function isPrime($num)
{
  $cont = 0;
  for($i = 1; $i <= $num; $i++){
    if($num % $i == 0)
      $cont++;
  }
  if($cont==2)
    return true;
  else
    return false;

?>

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;
  }
}
?>