Solución a la Tarea 4: Suma de muchos primos
Una idea para resolver esta tarea es la siguiente: Si tenemos un valor
de n, simplemente preguntamos
si n es primo, si n-1 es primo, etc. hasta que
encontramos el primer primo i.
Esto se puede hacer con un ciclo.
Una vez hecho esto, le restamos el valor de i a n
y si n sigue siendo positiva
volvemos a comenzar, lo cual se puede hacer con otro ciclo. Abajo
muestro un programa que hace esto:
#include <stdio.h>
int primo(long p)
{
long i;
for (i = 2; i*i <= p; i++)
if (p % i == 0)
return 0;
return 1;
}
int main(void)
{
long i, n;
scanf("%ld", &n);
for ( ; n > 0; n -= i) {
for (i = n; !primo(i); i--);
printf("%ld ", i);
}
printf("\n");
return 0;
}
Los valores de entrada y salida empleados para la evaluación
fueron los siguientes:
Entrada
Salida
1001 997 3 1
1354 1327 23 3 1
1503 1499 3 1
1991 1987 3 1
2000 1999 1
2096 2089 7
2998 2971 23 3 1
3001 3001
3298 3271 23 3 1
4324 4297 23 3 1
Para probar su tarea en UNIX, escriban la instrucción gcc sumampNN.c -o sumamp para
compilar su programa, y la instrucción ./sumamp para correrlo.
Algunos errores comúnes fueron: (a) No incluir al 1 como un
número primo. (b) Suponer que siempre se podía hacer con
uno o dos primos. Nota: en los
valores de entrada se incluyeron casos que resultaban en una suma de
uno a cuatro primos. La oferta hecha en clase seguirá siendo
válida hasta el último día del trimestre: les
pondré 10 en esta tarea si encuentran un número que
necesite cinco primos.