>>106
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int *sieve_of_eratosthenes(int upper) {
    int i, notprime, *integers = (int*)malloc(sizeof(int) * (upper + 1));
    for (i = 2; i <= upper; i++) integers[i] = 1;
    integers[0] = integers[1] = 0;
    for (i = 2; i <= upper / 2; i++) {
        notprime = i;
        while ((notprime += i) <= upper) integers[notprime] = 0;
    }
    return integers;
}
int is_prime(int n) {
    int *sieve = sieve_of_eratosthenes(n), ret = sieve[n];
    free(sieve);
    return ret;
}
int main(void) {
    int upper_num, *sieve, i;
    printf("MAX?:");
    scanf("%d", &upper_num);
    sieve = sieve_of_eratosthenes(upper_num);
    for (i = 2; i <= upper_num; i++)
        if (sieve[i]) printf("%4d", i);
    free(sieve);
}