Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <math.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <stdint.h>
- #include <string.h>
- #define ARGLEN 10
- #define true 1
- #define false !true
- int main(int argc, char** argv)
- {
- uint8_t notPrime;
- uint32_t count = 0;
- uint64_t start, end, divInt, i;
- uint64_t * primes;
- long double divFloat, current, currentMax, testPrime;
- // ensure null-terminated
- char *startArg = malloc(ARGLEN + 1); memset(startArg, 0, ARGLEN + 1);
- char *lastValid = malloc(ARGLEN + 1); memset(lastValid, 0, ARGLEN + 1);
- if (argc <= 1)
- {
- start = 3;
- }
- else
- {
- startArg = (char*)memcpy(startArg, argv[1], ARGLEN * sizeof(char));
- start = (uint64_t)strtoll(startArg, &lastValid, 10);
- if (strlen(argv[1]) > ARGLEN)
- {
- printf("warning: starting number truncated\n");
- }
- if (strcmp(startArg, lastValid) == 0)
- {
- printf("%s is an invalid number\n", startArg);
- return 1;
- }
- }
- if (argc <= 2)
- {
- end = 0xFFFFFFFFFFFFFFFF;
- }
- else
- {
- startArg = (char*)memcpy(startArg, argv[2], ARGLEN * sizeof(char));
- end = (uint64_t)strtoll(startArg, &lastValid, 10);
- if (strlen(argv[1]) > ARGLEN)
- {
- printf("warning: starting number truncated\n");
- }
- if (strcmp(startArg, lastValid) == 0)
- {
- printf("%s is an invalid number\n", startArg);
- return 1;
- }
- }
- if (start >= end)
- {
- printf("The interval [%lu, %lu] is empty, aborting", start, end);
- return 2;
- }
- printf("Starting at number \"%lu\", ending at number \"%lu\"\n", start, end);
- current = (long double)start;
- primes = malloc(((end - start) + 1) * sizeof(uint64_t));
- primes[0] = 2;
- while (1)
- {
- currentMax = sqrtl(current);
- notPrime = false;
- for (i = 0; i < count; i++)
- {
- testPrime = primes[i];
- if (testPrime > currentMax) { break; }
- divFloat = current / testPrime;
- divInt = round(divFloat);
- //printf("%-20Lf %Lf %lu\n", i, divFloat, divInt);
- if ((long double)divInt == divFloat)
- {
- notPrime = true;
- break;
- }
- }
- if (!notPrime)
- {
- printf("%lu\n", (uint64_t)current);
- primes[++count] = current;
- /*
- printf("%-12lu", (uint64_t)current);
- if (!(count & 7))
- {
- printf("\n");
- }
- */
- }
- current++;
- if (current >= end) { break; }
- }
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement