渾身の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;
}
}
}
}
}
}
}