fork(1) download
  1. #include <stdio.h>
  2.  
  3. int main() {
  4. int devemos_continuar = 1;
  5. long n;
  6. while (devemos_continuar) {
  7. devemos_continuar = scanf("%ld", &n) != EOF;
  8. if (devemos_continuar) {
  9. // grossamente equivalente ao "p = (-1, -1, -1, -1)"
  10. long prim1 = -1, prim2 = -1, prim3 = -1, prim4 = -1;
  11. {
  12. // bloco que determina se o número é soma dos quadrados de 4 primos consecutivos
  13. long p1 = 2, p2 = 3, p3 = 5, p4 = 7;
  14. long soma = p1*p1 + p2*p2 + p3*p3 + p4*p4;
  15.  
  16. // enquanto o próximo primo é válido, continua tentando...
  17. while (prim1 == -1 && p4 != -1 && soma <= n) {
  18. if (soma == n) {
  19. // grossamente equivalente ao "p = (p1, p2, p3, p4)"
  20. prim1 = p1;
  21. prim2 = p2;
  22. prim3 = p3;
  23. prim4 = p4;
  24. } else {
  25. // não deu como soma destes primos consecutivos
  26. // vamos rodar os números e tentar o próximo primo
  27. p1 = p2;
  28. p2 = p3;
  29. p3 = p4;
  30. // fazendo aqui o desenrolar da função proximo_primo
  31.  
  32. // começo do bloco equivalente à chamada a proximo_primo
  33. {
  34. long ret = -1;
  35. long next = p4 + 2;
  36. while (next < 10000 && ret == -1) {
  37. long divisor;
  38. for (divisor = 3; divisor*divisor < next && next % divisor != 0; divisor += 2);
  39. if (next % divisor != 0) {
  40. ret = next;
  41. }
  42. next += 2;
  43. }
  44. p4 = ret;
  45. }
  46. }
  47. soma = p1*p1 + p2*p2 + p3*p3 + p4*p4;
  48. }
  49. }
  50. if (prim1 != -1) {
  51. printf("É a soma de alguns primos\n");
  52. } else {
  53. printf("impossível representar\n");
  54. }
  55. }
  56. }
  57. return 0;
  58. }
Success #stdin #stdout 0s 4464KB
stdin
87
204
87
2020
100
stdout
É a soma de alguns primos
É a soma de alguns primos
É a soma de alguns primos
É a soma de alguns primos
impossível representar