素数を使って整数の素因数分解を行うプログラムを考えています。

関数p_flagは、整数I(2<=i<=n)について、iが素数であるとき、配列要素flag[i]に1を代入し、そうでないときに0を代入するプログラムです。素数でないものは、それより小さい素数の整数倍としてふるい落とします。

Main関数では、
変数mに2以上の整数を読み込み、その値を小さい素数で順に割っていき、商が1になるまで繰り返します。

これを実行するとキーボードからmの値を聞かれて入力したところで、プログラムが進まなくなってしまいます。お助けください><

#include <stdio.h>

void p_flag(int flag[], int n){
    int i,j;
    for (i =2; i <= n; i++){
        flag[i] = 1;
        printf("~~%d~~",i); 
        if(i <= 3){
            for (int k = 2; k <=i-1; k++ ){
                if(flag[k] != 0){
                    int check = i % k;
                    printf("%d",k); 
                    if (check == 0){
                        flag[i] = 0;    
                    }
                }
            }
        }
    }

}

int main(void){
    /*void p_flag();*/
    int flag[10000], m, md, i;
    printf("integer 2 or above: \n");
    scanf("%d", &m);

    p_flag(flag, m);

    md = m;
    for (i = 2; i < m/*flag[i]の要素数*/;i++){
        if(flag[i] != 0){
            while(m / flag[i] != 1){
                printf("%d",flag[i]);
                md = m / flag[i];
            }
        }
    }
}