1 C´omputo Cient´ıfico II - CO2112 - Laboratorio 3
En matem´aticas, un n´umero primo es un n´umero natural mayor que 1 que tiene
´
unicamente dos divisores distintos: ´el mismo y el 1. Por el contrario, los n´umeros com- puestos son los n´umeros naturales que tienen alg´un divisor aparte de s´ı mismo y del 1. El n´umero 1, por convenio, no se considera ni primo ni compuesto.
1. Dado un n´umero entero n mayor que 1, escribir una funci´on en ANSI C de nom- bre “metodo1” que determine los n´umeros primos menores o iguales a n (tabla de Erat´ostenes), donde n es un par´ametro de entrada de la funci´on:
(a) Se inicializa el arreglo “primos” de n´umeros primos en la secuencia de n´umeros impares entre 3 y n. Esto es as´ı porque sabemos que los n´umeros pares distintos de 2 NO son primos.
(b) Se eliminan los m´ultiplos impares de todos los n´umeros declarados como primos (ya que sabemos que los m´ultiplos pares de dichos n´umeros no est´an en el arreglo “primos”).
(c) Finalmente, se agrega el 2 al comienzo de la lista de n´umeros primos.
El vector de n´umeros primos debe escribirse en un archivo de nombre “salida.txt”
en forma matricial con filas de 10 elementos.
2. Denotemos los n´umeros primos en forma ascendente como p1, p2, p3, · · · , es decir, p1 = 2, p2 = 3, p3 = 5, etc.
Si se tienen p1, p2, · · · , pi−1 los primeros i − 1 primos, para i > 2, el primo siguiente se puede calcular f´acilmente como:
(a) sea x = pi−1+ 2 el pr´oximo posible n´umero primo
(b) dividir x por cada uno de los primos anteriores p que satisfacen p2 < x
(c) si x no es divisible por ninguno de esos primos, entonces pi = x (es decir, x es el siguiente primo). En cualquier otro caso, reemplazar x por x + 2 y repetir los pasos (b) y (c)
Elaborar una funci´on en ANSI C de nombre “metodo2” para calcular y almacenar en un vector los primeros n primos, donde n es un parametro de entrada de la funci´on y es mayor o igual a 3. Se supondr´a que los primos p1 = 2 y p2 = 3 son conocidos. Escribir el vector de n´umeros primos en el archivo “salida.txt” en forma matricial con filas de 10 elementos.
USB, CO2112, Profs. Buitrago y Jim´enez
2
3. Escribir una funci´on “main” en ANSI C que solicite al usuario un n´umero n > 2 y contenga los llamados a las funciones “metodo1” y “metodo2”. Se espera que el programa verifique exhaustivamente la pertinencia del n´umero n. Adicionalmente usar´a la funci´on clock() y la variable CLOCKS PER SEC de la libreria time.h de ANSI C para calcular y reportar, tanto por pantalla como en el archivo “salida.txt”, el tiempo que toman las funciones “metodo1” y “metodo2” para calcular los n´umeros primos menores o iguales a n.
La entrega debe ocurrir a m´as tardar a las 11:59 pm del jueves 21 de febrero, enviando al correo electr´onico del prof. Jim´enez (oswjimenez@gmail.com) un archivo comprimido (zip o rar) de nombre:
“CO2112 lab02 apellido nombre”.
Este archivo s´olo debe contener los c´odigos fuentes.
Observaciones generales
• ¿C´omo escribir un programa?
1. Especificar el problema.
2. Analizar y dividir ´este en una serie de pasos que conduzcan a la soluci´on, es decir, dise˜nar un algoritmo.
3. Escribir el c´odigo en ANSI C.
4. Compilar y corregir posibles errores de sintaxis.
5. Ejecutar el programa, verificando que funciona para todos los casos previstos en el dise˜no del algoritmo.
• El programa debe estar debidamente documentado. Recuerde que, en general, no es necesario (ni deseado) comentar cada l´ınea de c´odigo escrita. La mayor´ıa de las veces, las l´ıneas individuales hablan por s´ı solas en cuanto al trabajo puntual que realizan. Un buen comentario es aquel que nos dice cu´al es la raz´on por la cual la l´ınea est´a escrita de cierta manera y c´omo encaja eso dentro del contexto completo del programa.
USB, CO2112, Profs. Buitrago y Jim´enez