-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProject Euler #7.c
43 lines (40 loc) · 1.21 KB
/
Project Euler #7.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <math.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
int main() {
int N_upper_bound = 10001; // 10001 (+ 1) for Project Euler Problem
long int limit = ceil(N_upper_bound *
(log(N_upper_bound) + log(log(N_upper_bound))));
bool numbers[++limit];
memset(numbers, true, (limit) * sizeof(bool));
long int primes[N_upper_bound];
int primes_count = 0;
int T, N;
scanf("%d", &T);
for (int _ = 0; _ < T; _++) {
scanf("%d", &N);
if (primes_count >= N) {
printf("%ld\n", primes[N - 1]);
continue;
}
long int number = 2;
if (primes_count != 0) {
number = primes[primes_count - 1] + 1;
}
for (; number < limit; number++) {
if (numbers[number]) {
primes[primes_count++] = number;
for (long int multiple = number * number; multiple < limit;
multiple += number) {
numbers[multiple] = false;
}
if (primes_count == N) {
printf("%ld\n", number);
break;
}
}
}
}
return 0;
}