Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdbool.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define INIT_RESERVED 8
- struct vector {
- size_t vsize;
- size_t dsize;
- size_t reserved;
- void *data;
- };
- int vector_init(struct vector *v, size_t data_size)
- {
- v->vsize = 0;
- v->dsize = data_size;
- v->reserved = INIT_RESERVED;
- v->data = malloc(v->reserved * data_size);
- if (v->data == NULL)
- return 1;
- else
- return 0;
- }
- int vector_push(struct vector *v, void *data)
- {
- if (v->vsize >= v->reserved) {
- v->reserved *= 2;
- v->data = realloc(v->data, v->reserved*v->dsize);
- if (v->data == NULL)
- return 1;
- }
- memcpy(v->data + v->vsize*v->dsize, data, v->dsize);
- v->vsize++;
- return 0;
- }
- void *vector_index(struct vector *v, size_t i)
- {
- return v->data + i*v->dsize;
- }
- size_t vector_size(struct vector *v)
- {
- return v->vsize;
- }
- int vector_deinit(struct vector *v)
- {
- free(v->data);
- return 0;
- }
- int main(int argc, char *argv[])
- {
- struct vector ps;
- int max;
- if (argc != 2) {
- printf("> %s N\n", argv[0]);
- return 1;
- } else {
- max = atoi(argv[1]);
- }
- vector_init(&ps, sizeof(int));
- for (int i = 2; i <= max; i++) {
- bool prime = true;
- for (int j = 0; j < vector_size(&ps); j++) {
- int p = *(int*) vector_index(&ps, j);
- if (i%p == 0) {
- prime = false;
- break;
- } else if (p*p > i) {
- break;
- }
- }
- if (prime)
- vector_push(&ps, &i);
- }
- for (int i = 0; i < vector_size(&ps); i++)
- printf("%d ", *(int*) vector_index(&ps, i));
- printf("\n");
- vector_deinit(&ps);
- return 0;
- }
Add Comment
Please, Sign In to add comment