Guest User

Untitled

a guest
Nov 14th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. #include <stdbool.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. #define INIT_RESERVED 8
  7.  
  8.  
  9. struct vector {
  10. size_t vsize;
  11. size_t dsize;
  12. size_t reserved;
  13. void *data;
  14. };
  15.  
  16.  
  17. int vector_init(struct vector *v, size_t data_size)
  18. {
  19. v->vsize = 0;
  20. v->dsize = data_size;
  21. v->reserved = INIT_RESERVED;
  22. v->data = malloc(v->reserved * data_size);
  23.  
  24. if (v->data == NULL)
  25. return 1;
  26. else
  27. return 0;
  28. }
  29.  
  30.  
  31. int vector_push(struct vector *v, void *data)
  32. {
  33. if (v->vsize >= v->reserved) {
  34. v->reserved *= 2;
  35. v->data = realloc(v->data, v->reserved*v->dsize);
  36.  
  37. if (v->data == NULL)
  38. return 1;
  39. }
  40.  
  41. memcpy(v->data + v->vsize*v->dsize, data, v->dsize);
  42. v->vsize++;
  43.  
  44. return 0;
  45. }
  46.  
  47.  
  48. void *vector_index(struct vector *v, size_t i)
  49. {
  50. return v->data + i*v->dsize;
  51. }
  52.  
  53.  
  54. size_t vector_size(struct vector *v)
  55. {
  56. return v->vsize;
  57. }
  58.  
  59.  
  60. int vector_deinit(struct vector *v)
  61. {
  62. free(v->data);
  63. return 0;
  64. }
  65.  
  66.  
  67. int main(int argc, char *argv[])
  68. {
  69. struct vector ps;
  70. int max;
  71.  
  72. if (argc != 2) {
  73. printf("> %s N\n", argv[0]);
  74. return 1;
  75. } else {
  76. max = atoi(argv[1]);
  77. }
  78.  
  79. vector_init(&ps, sizeof(int));
  80.  
  81. for (int i = 2; i <= max; i++) {
  82. bool prime = true;
  83.  
  84. for (int j = 0; j < vector_size(&ps); j++) {
  85. int p = *(int*) vector_index(&ps, j);
  86.  
  87. if (i%p == 0) {
  88. prime = false;
  89. break;
  90. } else if (p*p > i) {
  91. break;
  92. }
  93. }
  94.  
  95. if (prime)
  96. vector_push(&ps, &i);
  97. }
  98.  
  99. for (int i = 0; i < vector_size(&ps); i++)
  100. printf("%d ", *(int*) vector_index(&ps, i));
  101.  
  102. printf("\n");
  103.  
  104. vector_deinit(&ps);
  105. return 0;
  106. }
Add Comment
Please, Sign In to add comment