質問: 0 ) printf("%d",i); } free(data); return 0; } ``` ### やりたいこと 入力された数値の正の約数を全て求めて表示するプログラムのフローチャートとソースプログラムを作成 せよ。なお、約数データは一旦動的メモリ割り当てで確保された領域に保存した後で表示すること(メモリ は最初に入力された整数の分だけ確保すればよい)。 ・1 未満の数は考えなくて良い ・約数かどうかは、入力された数をその数で割った際に割り切れるかどうか判断する ・入力された数を 1 から順に割っていけばよい ・実行例の場合:「2」を入力したときは int 型で 2 個分、「30」を入力したときは int 型で 30 個分を最初に 確保すればよい ### 困っていること そもそもメモリーの使い方が間違っているかもしれませんが、実行して入力して約数を求める時に落ちてしまいます。
回答: たぶん問題はこういう意味でしょう。 Nの約数を求めるときは、N要素の配列を求める。 IがNの約数の時には、配列のI個めにしるしをつける。 2-Nまでの数がNの約数であるか調べ終わったら、しるしが付いたところだけを表示する。 で、何が面白いか というと、 1.IがNの約数の時に、N/IもNの約数になる。 2.IがNの約数の時に、Iの約数もNの約数になる。 3.IがNの約数ではないときに、I*J( Jも整数)はNの約数にはならない。 そうは書いても、この小さな欄にそういったことを表現するのは面倒なので、力業だけで書くと.. ``` #include #include int main(int argc,char **argv) { char *m ; int i,n ; scanf("%d",&n) ; if( (m=(char *)malloc(sizeof(char)*(n+1)))==NULL ) return -1 ; m[0] = m[1] = m[n] = 0 ; for( i=2 ; i