12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #include <stdio.h>
- #include <stdint.h>
- #include <stdlib.h>
- #include <inttypes.h>
- #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;
- }
|