1 solutions
-
0
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <stdbool.h> void Sieve(int m, int **primes, int *prime_count) { bool *is_prime = malloc((m + 1) * sizeof(bool)); for (int i = 0; i <= m; i++) { is_prime[i] = true; } is_prime[0] = is_prime[1] = false; for (int i = 2; i <= (int)sqrt(m); i++) { if (is_prime[i]) { for (int j = i * i; j <= m; j += i) { is_prime[j] = false; } } } *prime_count = 0; for (int i = 2; i <= m; i++) { if (is_prime[i]) { (*prime_count)++; } } *primes = malloc((*prime_count) * sizeof(int)); int index = 0; for (int i = 2; i <= m; i++) { if (is_prime[i]) { (*primes)[index++] = i; } } free(is_prime); } int max_(int m) { int *primes; int prime_count; Sieve(m, &primes, &prime_count); int budget = m; int stations = 0; for (int i = 0; i < prime_count; i++) { if (budget >= primes[i]) { budget -= primes[i]; stations++; } else { break; } } free(primes); return stations; } int main() { int n, m; scanf("%d %d", &n, &m); int res = max_(m); printf("%d\n", res); return 0; }
- 1
Information
- ID
- 9309
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 6
- Tags
- # Submissions
- 26
- Accepted
- 7
- Uploaded By