ユークリッドの互除法を使って配列の先頭の2つの自然数の最小公倍数を求めて、次に3つ目の配列の要素と前に求めた最小公倍数との最小公倍数を求めて・・・と繰り返して全体の最小公倍数を求めようというプログラムです。
プログラムのどこが間違っているのか教えてください。
#include<stdio.h>
#include<stdlib.h>
int euclid(int a, int b){
int r;
int temp;
if(b > a){
temp = b;
b = a;
a = temp;
}
while(r!= 0){
r = a % b;
a = b;
b = r;
}
return a;
}
int divisor(int s[], int x){
int i;
int r;
for(i = 0; i <= x-2; i++){
r = euclid(s[i], s[i+1]);
s[i+1] = r;
}
return r;
}
int main(){
printf("配列のサイズを入力してください");
int a;
scanf("%d",&a);
int *x;
if(( x=( int* )malloc( sizeof( int ) ))== NULL){
fprintf(stderr, "memory allocation fault.\n");
exit(1);
}
int i;
for(i = 0; i <= a-1; i++){
printf("%dめの整数を入力してください", i+1);
scanf("%d",&x[i]);
}
printf("入力された配列は{");
int k;
for(k = 0; k <= a-2; k++){
printf("%d,",x[k]);
}
printf("%d}です。\n",x[a-1]);
int r;
printf("%d",divisor(x,a));
free(x);
}