1 solutions

  • 0
    @ 2025-2-8 13:21:33
    #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