前提・実現したいこと
入力した数値を素因数分解し、計算時間を測るプログラムを作っています。
発生している問題・エラーメッセージ
7ケタの数字を入力した場合は無限ループ
52行目のwhile分で無限ループしてしまいます。
それ以上の数字を入力するとsegmentation faultになります。
該当のソースコード
#include<stdio.h>
#include<time.h>
#define MAX 100
int main(void){
int i;
int j;
int root;
int average[MAX];
unsigned long int start; unsigned long int end; unsigned long int elapsed; scanf("%d",&i); printf("%d ",i); start = clock(); average[0]=1; for(j=1;j<100;j++){ average[j]=(average[j-1]+i/average[j-1])/2; root=average[j]; } printf("平方根:%d ",root); /*平方根を割り出す*/ int a; int primenumber[MAX]; int number=0; for(j=2;j<=root;j++){ for(a=2;a<=j;a++){ if(j==a){ primenumber[number]=j; number++; } else if(j%a==0)break; } } /*平方根までの素数を配列に格納*/ int d; int e[MAX]; int f; int flag=0; int check=0; for(d=0;d<number;d++){ e[d]=0; check=0; while(1){ if(i%primenumber[d]==0){ i=i/primenumber[d]; if(i>root){ for(f=2;f<i;f++){ if(i%f==0)break; else if(f==i-1){ printf("%d*1 ",i); break; } } }
e[d]++;
}
else break;
} if(e[d]>0){ printf("%d*%d ",primenumber[d],e[d]); } } end = clock(); elapsed = end-start; printf("計算時間:%lu\n",elapsed); return 0;
}
c言語
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/01 13:18