Си: вывод простых чисел от 1 до N

В первой строке содержится целое число ?. Нужно вывести все простые числа в диапазоне от 1 до ? включительно, по одному числу в строке.

Вот мой код, прога ничего не выводит и зависла по времени.
Посоветуйте, что сделать/исправить, пожалуйста.
P.S. Только начинаю изучать Си, поэтому простите мою тупость :)

#include<stdio.h>
int main(){
    int i, N, t, k;
    t=0;
    i=2;
    scanf("%d", &N);
    for (k=2; k<=N; k++){
        while(i<N){
            if (k%i==0){
                t++;
                i++;
            }
        if(t==0){
            printf("%d", k);
        }
        }
    }
}

Ответы (4 шт):

Автор решения: Danis
#include<stdio.h>
int main(){
    int i, N, t, k;
   
    scanf("%d", &N);
    for (k=2; k<=N; k++){
        i = 2;
        t = 0;
        while(i < k){
            if (k%i==0){
                t++;
            }
            i++;
        }
        if(t==0){
            printf("%d\n", k);
        }
    }
}
→ Ссылка
Автор решения: Harry

Просто не вынесла душа такой неэффективности, как у Danis.

int main(int argc, const char * argv[])
{
    int N;
    scanf("%d",&N);
    if (N >= 2) puts("2");
    for(int n = 3; n <= N; n+=2)
    {
        int prime = 1;
        for(int i = 3; i*i <= n; i+=2)
            if (n%i==0) { prime = 0; break; }
        if (prime) printf("%d\n",n);
    }
}

А вообще этот вопрос уже столько раз обсасывался на RuSO, что не найти ответ - просто стыдно.

Просто ради интереса - для N = 100000 мой код работал на моей машине порядка 33 мс, код Danis для того же N - 17 секунд.

→ Ссылка
Автор решения: Гринёв

можно же гораздо короче:

#include <stdio.h>

int n=0;

int main()
{
    scanf("%d", &n);
    for(int b = 1;b <= n;b++)
    {
        printf("%d\n",b);
    }
    return 0;
}
→ Ссылка
Автор решения: Magister
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <stdbool.h>
 
int main ()
{
    int n, p;
    int *mass;
    bool flag; //"зачеркивали" ли число для данного p
    printf("Input n: ");
    scanf_s("%d", &n);
    if (n >= 2)
    {
        n = n - 1; //теперь n - это количество чисел в массиве
        mass = (int *)malloc(n * sizeof(int));
        for (int i = 0; i < n; i++)
            mass[i] = i + 2;
        for (int i = 0; i < n; i++)
        {
            p = mass[i];
            flag = false;
            for (int j = i + 1; j < n; j++)
            {
                if (!(mass[j] % p))
                {
                    for (int k = j; k < n - 1; k++)
                        mass[k] = mass[k+1];
                    flag = true;
                    n--; //уменьшаем, потому что чисел на одно стало меньше
                    j--; //уменьшаем, для того чтобы снова проверить на кратность j-е число. Оно же теперь стало другим
                }
            }
            if (flag == false) break;
        }
        for (int i = 0; i < n; i++)
            printf("%d ", mass[i]);
        free(mass);
    }
    else
        printf("Error. n must be >= 2\n");
 
    _getch();
    return 0;
}

Прошу прощения не учел увеличение множества, знакомый программист подсказал ответ взял отсюда

→ Ссылка