渾身の108行、ついにクリア。
俺は所詮のこのこさ。こんな汚いプログラムでもピーチ姫を救ってやる。
/* t00274yw 和田裕介作成 */ /* 著作権は和田裕介に帰属 無断転用禁止 */ /* システムプログラミング02年4月27日までの宿題 */ /* 素因数分解の表を吐き出し、べき乗表示させるプログラム */ # include int i; int n; int m; int x; int y; int z; char prime[1001]; main(){ /* 初期化,すべての数は素数ということにする */ for(i=0; i<1001; i++){ prime[i] = 1; } /*素数は1,素数でないのは0*/ prime[1] = 0; for(i=2; i<1001; i++){ if(prime[i] == 1 ){ for(n=2; i*n<1001; n++){ prime[i*n] = 0; } } } /* 巾乗の数を記憶する変数がy,一時的に出力した数を記憶していく変数がz */ for(i=2; i<1001; i++){ x = i; y = 1; z = 0; printf("%d = ",i); for(m=2; m<1001; m++){ /* Xが素数だったらいきなり表示して抜ける */ if(prime[m] == 1){ if((x%m == 0) && (x/m==1) ){ if(y == 1){ if(z != 0){ printf("%d x ",z); printf("%d\n",x); }else{ printf("%d\n",x); } }else{ printf("%d^%d x ",z,y); printf("%d\n",x); } break; } if((x%m == 0) && (x/m>1)){ /* xがmで割りきれる間 */ while(x%m == 0){ /* Xが素数になったら */ if (x/m == 1){ if(z == m){ y ++; }else{ printf("%d^%d x ",z,y); y = 1; } if(y == 1){ printf(" %d\n",m); break; }else{ printf("%d^%d\n",m,y); break; } } else{ if(z == m){ y ++; }else if(z == 0){ z = m; }else{ if(y != 1){ printf("%d^%d x ",z,y); }else{ printf("%d x ",z); } y = 1; z = m; } x = x/m; continue; } } } } } } }