Acciones

Diferencia entre revisiones de «2010 Ejercicio 5: Buscar el número primo que ocupa la posición 10001 en la secuencia de números primos»

De Software Libre para la Enseñanza y el Aprendizaje de las Matemáticas (2010-11)

(Solución 2 (en Groovy))
 
(No se muestran 2 ediciones intermedias de otro usuario)
Línea 49: Línea 49:
  
 
println(primo)
 
println(primo)
 +
== Solución 3 (en wxMaxima 0.84) ==
 +
 +
Otra solución usando Máxima es:
 +
 +
  (i%1) a:1$
 +
        cont:0$
 +
        for i:1 step a while cont<10001 do (
 +
        a:next_prime(a),cont:cont+1,if(cont=10001)then(print("El nº primo de la posición 10001 es",a))
 +
        )$;
 +
 +
  (o%1)  "El nº primo de la posición 10001 es"104743 resuelto por[[Usuario:Rafatelo|Rafatelo]]

Revisión actual del 10:55 8 mar 2011

Inserte aquí texto sin formatoInserte aquí texto sin formato== Enunciado == Buscar el número primo que ocupa la posición 10001 en la secuencia de números primos.

Solución 1 (en wxMaxima 0.84)

Una solución usando el lenguaje de cálculo simbólico Máxima es:

 (i%1) cont: 0$
       for i: 1 step 1 while cont<10001 do 
       (
          if (primep(i) = true) then(
          cont: cont+1),
          if (cont = 10001) then(
            print("El Número primo en la posición 10001 es: ",i))
       );
 (o%1)  El Número primo en la posición 10001 es: 104743
        done


Solución 2 (en Groovy)

A igual que mis compañeros en otros ejercicios, voy a utilizar el lenguaje de programación Groovy. Se puede probar el script en la página http://groovyconsole.appspot.com/

Solución: 104743


def es_primo(int num) {

      if( num == 1 )
                 return false;
             else if( num < 4 )
                  return true; 
              
              int m = (int) Math.sqrt(num);
 for (int i = 2; i <= m; i++) {
  if (num % i == 0)
   return false;
 }

return true; }

def numero=1 def primo =1 while(numero < 10001){

   if(es_primo(primo)){
       numero = numero +1;
   }

primo = primo +1; }

println(primo)

Solución 3 (en wxMaxima 0.84)

Otra solución usando Máxima es:

 (i%1) a:1$
       cont:0$
       for i:1 step a while cont<10001 do (
       a:next_prime(a),cont:cont+1,if(cont=10001)then(print("El nº primo de la posición 10001 es",a))
       )$;
 (o%1)  "El nº primo de la posición 10001 es"104743 resuelto porRafatelo