Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<math.h>
- typedef int BitArray_t[];
- #define int_size sizeof(int)
- #define size(x) x[0] * bits
- #define bits int_size * 8
- #define div(pos) pos / (bits)
- #define mod(pos) pos % (bits)
- #define create(x, amount) int b_array_size = amount / (bits);\
- if (amount % (bits)) b_array_size++;\
- int x[b_array_size + 1];\
- for(int i = 0; i <= b_array_size; i++) x[i] = 0;\
- x[0] = b_array_size
- #define GET_BIT_(x, position) (((x[div(position) + 1]) & ((int)1 << mod(position))) != 0)
- #define SET_BIT_(x, position, val) if (val) (x[div(position) + 1] |= ((int)1 << (mod(position))));\
- else (x[div(position) + 1] &= ~((int)1 << (mod(position))))
- int main(int argc, char **argv)
- {
- int c = atoi(argv[1]);
- const int SC = (int)sqrt(c);
- create(b_array, c);
- for (int i = 2; i < SC; i++)
- {
- if (!(GET_BIT_(b_array,i)))
- {
- for (int j = 2; j * i < size(b_array); j++)
- {
- SET_BIT_(b_array, j * i, 1);
- }
- }
- }
- int i = 2;
- if (c)
- {
- while (c != 1)
- {
- if ((!(GET_BIT_(b_array, i))) && !(c % i))
- {
- printf("%d ", i);
- c /=i;
- }
- else
- i++;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement