Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.81 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdint.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <math.h>
  6.  
  7. #define BIT(x) (1 << (x))
  8.  
  9. int main(int argc, char* argv[]) {
  10.   size_t n, l, i, j; uint8_t* primes;
  11.   if (argc != 2 || (n = strtoul(argv[1], NULL, 10)) < 2) {
  12.     fprintf(stderr, "using: %s (num >= 2)\n", argv[0]);
  13.     return 1;
  14.   }
  15.   l = (size_t)sqrt(n) | 1;
  16.   if ((primes = malloc(n / 8 + 1)) == NULL) {
  17.     fprintf(stderr, "malloc() failed -- number too big?\n");
  18.     return 1;
  19.   }
  20.   memset(primes, 0xAA, n / 8 + 1);
  21.   printf("2\n");
  22.   for (i = 3; i <= l; i += 2) {
  23.     if (primes[i / 8] & BIT(i % 8)) {
  24.       for (j = i * i; j <= n; j += i) primes[j / 8] &= ~BIT(j % 8);
  25.       printf("%zu\n", i);
  26.     }
  27.   }
  28.   for (; i <= n; i += 2)
  29.     if (primes[i / 8] & BIT(i % 8))
  30.       printf("%zu\n", i);
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement