#include #include #include #include #define NON_PRIME 1 #define PRIME 2 typedef struct value { long long number; uint8_t flag; } value; int main (int argc, char** argv) { if (argc != 2) { printf("usage: %s [upper limit]", argv[0]); return -1; } long long limit = atoll(argv[1]); value *v; v = malloc(sizeof(value) * limit); // fill value for (int i = 2; i < limit - 2; ++i){ v[i].number = i; v[i].flag = 0; } for (long long i = 2; i < limit - 2; ++i){ if (v[i].flag == NON_PRIME) { continue; } v[i].flag = PRIME; long long z = i; long long j = z * z; while (j < limit) { v[j].flag = NON_PRIME; j = v[i].number * z; z++; } } long long count = 0; for (long long i = 2; i < limit - 2; ++i){ if (v[i].flag == PRIME) { printf("\nPrime: %lld", v[i].number); count ++; } } printf("\n\nTotal Primes: %lld", count); return 0; }