

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

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

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

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

[code]

    #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];
                }
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2017-04-15T07:30:07.773
34033
2017-04-15T15:27:31.573
2017-04-15T15:27:31.573
5044
22573
question
c
素数を使って整数の素因数分解を行うプログラムを考えています。


この箇所で`i`が増加しないのでループが抜けられないように見受けます。

[code]

        while(m / flag[i] != 1){
            printf("%d",flag[i]);
            md = m / flag[i];
        }
    
[/code]

なお、`flag[i]`が0だと「0除算」で異常終了するので、ロジックを見直す必要もあるかと思います。


CC BY-SA 3.0
2017-04-15T13:13:25.350
34040
2017-04-15T13:13:25.350
20098
34033
answer