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.