Sunday, January 22, 2006

Problema #1 Suma de los Primeros 100 numeros Primos
A)
//Bucle For
int resultado = 0;
int count, NumeroActual;
bool EsPrimo = true;
NumeroActual =2;
for(count=0; count<100; NumeroActual++)
{
EsPrimo = true;
for (int i = 2; i<=sqrt(NumeroActual); i++)
if (NumeroActual % i == 0)
EsPrimo=false;
if(EsPrimo)
{
resultado+= NumeroActual;
count++;
}
}
cout << resultado << endl;

B)
//Bucle While
int Resultado = 0;
int Count = 0;
int NumeroActual = 2;
int CountActual = 2;
bool NumeroPrimo = true;
while(Count < 100)
{
NumeroPrimo = true;
while((CountActual) <= sqrt(NumeroActual))
{
if(NumeroActual % CountActual == 0)
{
NumeroPrimo = false ;
}
CountActual++;
}
if(NumeroPrimo)
{
Resultado+= NumeroActual;
Count++;
}

NumeroActual++;
CountActual = 2;
}
cout << Resultado << endl;

C)
En el segundo bucle, se pueden cambiar los limites para que que llegue al numero que se esta
probando, es decir;
for (int i = 2; i<=NumeroActual; i++)

O algo mas efficiente que la anterior, solo se llega a la mitad del numero, es decir;
for (int i = 2; i <= NumeroActuall/2 ; i++)

esto es porque despues de la mitad del numero, el resultado siempre va a ser menor que 2. Porque si divides un numero por un segundo que es mas alto que la mitad del primero, siempre
va a resultar un decimal menor que 2.

D)
En mi opinion ambos bucles hacen lo mismo, solo que en el While uno tiene que hacer el incremento. El for se ve mas limpio, pero en ambos bucles se hacen las mismas operaciones, aumentos, sumatorias, validaciones, y producen el mismo resultado. La unica ventaja es que el for es mas facil de implementar, uno debe de tener en cuenta que la condicion de incremento no tiene que ser la misma que el contador.


Problema #2
Se Utiliza 2 computadoras, una de 3Ghz y la Otra a 800mhz y solo se utiliza para ordenar 1,000,000 de registros de nombres. En que condiciones el segundo equipo seria mas rapido que el primero?

Si el primer computador utiliza el Bubble Sort mal implementado, assumiendo el algoritmo no se entera cuando esta organizado, y el segundo ordenador utiliza el quicksort es casi seguro que el segundo ordenador terminara primero. El algoritmo quicksort utiliza operaciones a nivel de bit (bitwise operators)

Problema #3
int Numero1, Numero2;
cin >> Numero1;
cin >> Numero2;
if (Numero1 < Numero2)
{
int temp = Numero2;
Numero2 = Numero1;
Numero1 = temp;
}
int CopyNumero1 = Numero1;
int CopyNumero2 = Numero2;
int Condicion = 1;
while(Condicion != 0)
{
Condicion = Numero1 % Numero2;
Numero1 = Numero2;
Numero2 = Condicion;
}
cout << CopyNumero1 * CopyNumero2 / Numero1 << endl;

A) 4 formas
I-) Con el Maximo Commun Factor (MCF), Se multiplican ambos numeros y el resultado se divide entre el MCF.
II-)Se divide un de los numero entre el MCF y el resultado se multiplica por el otro numero
III)Se encuentran las portencias mas altas de los factores de los numero y se multiplican.
IV) Dado que utilizamos una computadora podemos hacer hacer un bucle que divida el contador
entre ambos numeros, el primero numero que cumple esta condicion es el minimo commun denominador

B)
Yo diria que la I o la II

C)
Porque que la III requiere mas calculos debe de ser mas lenta, y la
forma IV es simplemente absurda.

No comments: