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)

(Enunciado)
 
(No se muestran 6 ediciones intermedias de 3 usuarios)
Línea 1: Línea 1:
== Enunciado ==
+
<nowiki>Inserte aquí texto sin formato</nowiki><nowiki>Inserte aquí texto sin formato</nowiki>== Enunciado ==
 
Buscar el número primo que ocupa la posición 10001 en la secuencia de números primos.
 
Buscar el número primo que ocupa la posición 10001 en la secuencia de números primos.
  
== Solución 1 (en Groovy) ==
+
== Solución 1 (en wxMaxima 0.84) ==
La solución que propongo está escrita en lenguaje Groovy. Este es un lenguaje muy reciente con licencia libre y derivado del Java, por tanto entra dentro de la categoría de lenguajes orientados a objetos. En la página http://groovyconsole.appspot.com/ podemos introducir el código y ejecutarlo pulsando "Execute Script".
 
  
Quien desee aprender más acerca de dicho lenguaje puede visitar la página http://groovy.codehaus.org/. Actualmente me gano la vida programando en dicho lenguaje ;)
+
Una solución usando el lenguaje de cálculo simbólico Máxima es:
  
Solución: 233168
+
  (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))
 +
        );
  
  def suma = 0
+
  (o%1) El Número primo en la posición 10001 es: 104743
+
        done
for (i in 1..999) {
+
 
    if (i%3 == 0 || i%5 == 0) {
+
 
        suma = suma + i
+
== 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
println(suma)
+
 
 +
 
 +
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 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