prime-sum.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #include "include/ps-init.h"
  2. #include "prescheme.h"
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. long sum_sieve(char *, long);
  7. char *make_sieve(long);
  8. long main(long, char **);
  9. long sum_sieve(char *sieve_0X, long limit_1X) {
  10. long arg0K1;
  11. long arg0K0;
  12. long v_4X;
  13. long result_3X;
  14. long i_2X;
  15. {
  16. arg0K0 = 0;
  17. arg0K1 = 0;
  18. goto L114;
  19. }
  20. L114 : {
  21. i_2X = arg0K0;
  22. result_3X = arg0K1;
  23. if ((i_2X == (1 + limit_1X))) {
  24. return result_3X;
  25. } else {
  26. if ((*(sieve_0X + i_2X))) {
  27. arg0K0 = (result_3X + i_2X);
  28. goto L117;
  29. } else {
  30. arg0K0 = result_3X;
  31. goto L117;
  32. }
  33. }
  34. }
  35. L117 : {
  36. v_4X = arg0K0;
  37. arg0K0 = (1 + i_2X);
  38. arg0K1 = v_4X;
  39. goto L114;
  40. }
  41. }
  42. char *make_sieve(long limit_5X) {
  43. long arg0K1;
  44. long arg0K0;
  45. long j_11X;
  46. long i_10X;
  47. long j_9X;
  48. long i_8X;
  49. long i_7X;
  50. char *sieve_6X;
  51. {
  52. sieve_6X = (char *)malloc(sizeof(char) * (1 + limit_5X));
  53. arg0K0 = 0;
  54. goto L183;
  55. }
  56. L183 : {
  57. i_7X = arg0K0;
  58. if ((i_7X == (1 + limit_5X))) {
  59. *(sieve_6X + 0) = 0;
  60. *(sieve_6X + 1) = 0;
  61. arg0K0 = 2;
  62. goto L151;
  63. } else {
  64. *(sieve_6X + i_7X) = 1;
  65. arg0K0 = (1 + i_7X);
  66. goto L183;
  67. }
  68. }
  69. L151 : {
  70. i_8X = arg0K0;
  71. j_9X = i_8X * i_8X;
  72. if ((limit_5X < j_9X)) {
  73. return sieve_6X;
  74. } else {
  75. if ((*(sieve_6X + i_8X))) {
  76. arg0K0 = i_8X;
  77. arg0K1 = j_9X;
  78. goto L136;
  79. } else {
  80. goto L166;
  81. }
  82. }
  83. }
  84. L136 : {
  85. i_10X = arg0K0;
  86. j_11X = arg0K1;
  87. if ((limit_5X < j_11X)) {
  88. goto L166;
  89. } else {
  90. *(sieve_6X + j_11X) = 0;
  91. arg0K0 = i_10X;
  92. arg0K1 = (j_11X + i_10X);
  93. goto L136;
  94. }
  95. }
  96. L166 : {
  97. arg0K0 = (1 + i_8X);
  98. goto L151;
  99. }
  100. }
  101. long main(long argc_12X, char **argv_13X) {
  102. long arg0K0;
  103. long result_19X;
  104. long result_18X;
  105. char *sieve_17X;
  106. long limit_16X;
  107. FILE *err_15X;
  108. FILE *out_14X;
  109. {
  110. out_14X = stdout;
  111. err_15X = stderr;
  112. if ((2 == argc_12X)) {
  113. limit_16X = atol((*(argv_13X + 1)));
  114. if ((limit_16X < 0)) {
  115. ps_write_string("Limit must be non-negative", err_15X);
  116. {
  117. long ignoreXX;
  118. PS_WRITE_CHAR(10, err_15X, ignoreXX)
  119. }
  120. return 1;
  121. } else {
  122. if ((limit_16X < 2)) {
  123. arg0K0 = 0;
  124. goto L307;
  125. } else {
  126. sieve_17X = make_sieve(limit_16X);
  127. result_18X = sum_sieve(sieve_17X, limit_16X);
  128. free(sieve_17X);
  129. arg0K0 = result_18X;
  130. goto L307;
  131. }
  132. }
  133. } else {
  134. ps_write_string("usage: ", err_15X);
  135. ps_write_string((*(argv_13X + 0)), err_15X);
  136. ps_write_string(" <limit>", err_15X);
  137. {
  138. long ignoreXX;
  139. PS_WRITE_CHAR(10, err_15X, ignoreXX)
  140. }
  141. return 1;
  142. }
  143. }
  144. L307 : {
  145. result_19X = arg0K0;
  146. ps_write_string("Sum of primes up to ", out_14X);
  147. ps_write_integer(limit_16X, out_14X);
  148. ps_write_string(" is ", out_14X);
  149. ps_write_integer(result_19X, out_14X);
  150. {
  151. long ignoreXX;
  152. PS_WRITE_CHAR(10, out_14X, ignoreXX)
  153. }
  154. return 0;
  155. }
  156. }