Guest User

Untitled

a guest
Jan 19th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.06 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cmath>
  3. #include <iostream>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. int esPrimo (int num) {
  9. /* Funcion que me dice si un numero es o no primo */
  10.  
  11.     int i;
  12.     for (i = 2; i <= sqrt(num); i++)
  13.         if (num % i == 0)
  14.             return 0;
  15.  
  16.     return 1;
  17. }
  18.  
  19. /*
  20.  
  21. int masCercano(int num) {
  22.  
  23.  La use para buscar otro metodo de generar la suma de primos. Tambien sirve
  24. pero provoca TIME LIMIT
  25.  
  26.     int i ;
  27.     for (i = 3; i < num; i+=2)
  28.         if (esPrimo(num - i))
  29.             return i;
  30.  
  31. return 0;
  32.  
  33. }*/
  34.  
  35.  
  36. void generarPar(int num) {
  37.  
  38.     /* Un par siempre puede ser escrito como 2 + 2 + ALGO.
  39.        Si mi numero a escribir era 12, deje 12 como 2 + 2 + 8
  40.        y ahora a partir del 8 busque el primer numero primo que
  41.        restado a 8 daba la diferencia prima. En este caso 3.
  42.        8 - 3 = 5 y cinco es primo.
  43.  
  44.        Asi que escribia 2 + 2 + 3 + 5
  45.        Fin al problema.
  46.     */
  47.  
  48.  
  49.     int i,nuevoNum;
  50.     int valor;
  51.  
  52.     nuevoNum = num - 4;
  53.  
  54.     for (i = 3; i < num; i+=2)
  55.         if(esPrimo(i)) {
  56.             valor = nuevoNum - i;
  57.             if (esPrimo(valor)) {
  58.                 printf("2 2 %d %d\n",i,valor);
  59.                 break;
  60.             }
  61.         }
  62. }
  63.  
  64. void generarImpar(int num) {
  65.  
  66.     /* Idem al anterior con la diferencia que escribia la suma
  67.     como 2 + 3 */
  68.  
  69.     int i,nuevoNum;
  70.     int valor;
  71.  
  72.  
  73.     nuevoNum = num - 5;
  74.  
  75.     for (i = 3; i < num; i+=2)
  76.         if(esPrimo(i)) {
  77.             valor = nuevoNum - i;
  78.             if (esPrimo(valor)) {
  79.                 printf("2 3 %d %d\n",i,valor);
  80.                 break;
  81.             }
  82.         }
  83.  
  84. }
  85.  
  86.  
  87.  
  88. int main () {
  89.  
  90.  
  91.     int numero;
  92.  
  93.     while (cin >> numero) {
  94.  
  95.         if (numero < 8)
  96.             printf("Impossible.\n");
  97.         else if (numero == 8)
  98.             printf("2 2 2 2\n");
  99.         else if (numero == 9)
  100.             printf("2 3 2 2\n");
  101.         else{
  102.             if (numero%2 == 0)
  103.                 generarPar(numero);
  104.             else
  105.                 generarImpar(numero);
  106.             }
  107.  
  108.     }
  109. return 0;
  110. }
Add Comment
Please, Sign In to add comment