Java vs C++ (algoritmo numeros primos)

A continuación podréis ver una comparación entre Java y C++ donde se medirá el tiempo que toman ambos en contar la cantidad de números primos que hay desde 0 hasta 10.000, 100.000 y 1.000.000 respectivamente.
Comenzamos mostrando el código de ambos programas, este será el mismo en las tres pruebas exceptuando el cambio en el límite del primer bucle for para las siguientes pruebas.

Código JAVA:
public class Main {
    public static void main(String[] args) {
        int nPrimos = 0;
        boolean isPrimo;

        for(int i = 2;i < 10000; i++) {
            isPrimo = true;
            for(int j = 2; isPrimo && j <= Math.sqrt((double)i); j++) {
                if(i % j == 0) {
                    isPrimo = false;
                }
            }
            if(isPrimo) {
                nPrimos++;
            }
        }

        System.out.println(nPrimos + " encontrados.");
    }
}
Código C++:
#include <iostream>
#include <math.h>

int main() {
    int nPrimos = 0;
    bool isPrimo;

    for(int i = 2;i < 10000; i++) {
        isPrimo = true;
        for(int j = 2; isPrimo && j <= sqrt((double)i); j++) {
            if(i % j == 0) {
                isPrimo = false;
            }
        }
        if(isPrimo) {
            nPrimos++;
        }
    }

    std::cout << nPrimos << " encontrados." << std::endl;
    return 0;
}
El siguiente paso es compilar ambos programas, para ello utilizaremos JDK-7u10 para JAVA y g++4.7 para C++.
//Compilar el archivo Main.java
javac Main.java
//Compilar el archivo main.cpp
g++ main.cpp -o main
En la siguiente captura de pantalla, podéis ver las características del sistema donde se realizaron las pruebas.

Y sin más dilación, os dejo con los resultados de la prueba, cada una de las tres pruebas se realizó tres veces con cada lenguaje:

NOTA: La manera de medir el tiempo de ejecución ha sido con el comando time de Ubuntu. Este comando devuelve 3 tiempos, el primero es el tiempo de ejecución total "real", el segundo el de CPU del usuario, y el tercero el de CPU del sistema. Con estos dos últimos valores, sabemos el tiempo de CPU total, que suele ser menor al de ejecución total.

Primos hasta 10.000:
Hasta 100.000:
Hasta 1.000.000:

¿JAVA es más rápido que C++ en la última prueba? Contra todo pronóstico, así es, aun no salgo de mi asombro...

Comentarios

  1. Que algoritmo es el que implementas acá?

    ResponderEliminar
  2. A utilização dos números primos na criptografia faz deles um tópico de estudo muito ativo entre os matemáticos, pois a mesma é base da sociedade moderna.

    Bom artigo, muito interessante a comparação! Abraços.

    Números Primos em Java Algoritmo

    ResponderEliminar

Publicar un comentario

Si tenéis alguna duda o sugerencia, no dudéis en comentar. ;)

Entradas populares de este blog

Calcular factorial de un numero en JAVA

Ordenar cualquier array con SORT en JAVA

Modificadores de acceso (public, protected y private) JAVA