diff --git a/.gitignore b/.gitignore index 53f12f0f..8d3f5c3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ *.swp +*.exe *.out +.vscode/ diff --git a/DIRECTORY.md b/DIRECTORY.md index e022ef54..3a5260f8 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -229,6 +229,9 @@ * Problem 09 * [Sol1](https://github.com/TheAlgorithms/C/blob/master/project_euler/Problem%2009/sol1.c) * [Sol2](https://github.com/TheAlgorithms/C/blob/master/project_euler/Problem%2009/sol2.c) + * Problem 10 + * [Sol1](https://github.com/TheAlgorithms/C/blob/master/project_euler/Problem%2010/sol1.c) + * [Sol2](https://github.com/TheAlgorithms/C/blob/master/project_euler/Problem%2010/sol2.c) ## Searching * [Binary Search](https://github.com/TheAlgorithms/C/blob/master/searching/Binary_Search.c) diff --git a/project_euler/Problem 10/sol1.c b/project_euler/Problem 10/sol1.c new file mode 100644 index 00000000..a67dc281 --- /dev/null +++ b/project_euler/Problem 10/sol1.c @@ -0,0 +1,37 @@ +#include +#include +#include + +char is_prime(long n) +{ + for (long i = 2; i < sqrtl(n) + 1; i++) + if ( n % i == 0) + return 0; + + return 1; +} + + +long long sum_of_primes(long N) +{ + long long sum = 2; + + for (long i = 3; i < N; i+=2) /* skip even numbers */ + if (is_prime(i)) + sum += i; + + return sum; +} + + +int main(int argc, char* argv[]) +{ + long n = 100; + + if (argc == 2) /* if command line argument is provided */ + n = atol(argv[1]); /* use that as the upper limit */ + + printf("%ld: %lld\n", n, sum_of_primes(n)); + + return 0; +} \ No newline at end of file diff --git a/project_euler/Problem 10/sol2.c b/project_euler/Problem 10/sol2.c new file mode 100644 index 00000000..d746fcd7 --- /dev/null +++ b/project_euler/Problem 10/sol2.c @@ -0,0 +1,51 @@ +#include +#include +#include + + +int main(int argc, char* argv[]) +{ + long n = 100; + long long sum = 0; + char *sieve = NULL; + + if (argc == 2) /* if command line argument is provided */ + n = atol(argv[1]); /* use that as the upper limit */ + + /* allocate memory for the sieve */ + sieve = calloc(n, sizeof(*sieve)); + if(!sieve) + { + perror("Unable to allocate memory!"); + return -1; + } + + /* build sieve of Eratosthenes + In the array, + * if i^th cell is '1', then 'i' is composite + * if i^th cell is '0', then 'i' is prime + */ + for (long i = 2; i < sqrtl(n); i++) + { + /* if i^th element is prime, mark all its multiples + as composites */ + if (!sieve[i]) + { + for (long j = i * i; j < n + 1; j += i) + { + sieve[j] = 1; + } + sum += i; + } + } + + for (long i = sqrtl(n)+1; i < n; i++) + if (!sieve[i]) + sum += i; + + free(sieve); + + printf("%ld: %lld\n", n, sum); + + return 0; +} \ No newline at end of file