miércoles, agosto 27, 2008

Programa en C#




He ejecutado el mismo programa de los primos pero esta vez en C#. El límite fijado ha sido otra vez el número 100.000.000.

El resultado ha sido intermedio entre el código VB.NET (el más rápido con 10 minutos 21 segundos) y el código C++ (el más lento con 10 minutos 46 segundos después de activar la optimización de velocidad).

Exactamente con C# ha tardado 10 minutos 40 segundos.

Saludos.

El programa es el siguiente:


using System;
using System.IO;
using System.Globalization;

namespace BuscaPrimos
{
///
/// Descripción breve de Class1.
///

class Class1
{
///
/// Punto de entrada principal de la aplicación.
///

[STAThread]
static void Main(string[] args)
{

const string fichero = @"primos.txt";
System.IO.StreamWriter sw = new System.IO.StreamWriter(fichero);

string horaInicio = DateTime.Now.ToString("G",DateTimeFormatInfo.InvariantInfo);
int candidato = 5;
int pruebaDivisor;
int esPrimo;
int limiteSuperior;

Console.Write("Introduce el limite al que llegar: ");
limiteSuperior = Convert.ToInt32(Console.ReadLine());

sw.WriteLine(2);
sw.WriteLine(3);
while(candidato <= limiteSuperior)
{
pruebaDivisor = 5;
esPrimo = 1;
while(pruebaDivisor * pruebaDivisor <= candidato)
{
if(candidato % pruebaDivisor == 0)
{
esPrimo = 0;
break;
}
pruebaDivisor += 2;
}
if(esPrimo == 1)
sw.WriteLine(candidato);

candidato += 2;

pruebaDivisor = 5;
esPrimo = 1;
while(pruebaDivisor * pruebaDivisor <= candidato)
{
if((candidato % pruebaDivisor) == 0)
{
esPrimo = 0;
break;
}
pruebaDivisor += 2;
}
if(esPrimo == 1)
sw.WriteLine(candidato);

candidato += 4;
}

sw.Write("Hora de inicio: ");
sw.WriteLine(horaInicio);
sw.Write("Hora de final: ");
sw.WriteLine(DateTime.Now.ToString("G",DateTimeFormatInfo.InvariantInfo));
sw.Close();
Console.WriteLine("Fin.");
}
}
}

No hay comentarios: