公約数を全て表示するプログラムです
Posted: 2015年12月06日(日) 14:26
最大公約数を計算する関数(教科書p.188 リスト5.18参照) int gcd( int x, int y) を利用して,2つの自然数 x, y に対し,その公約数をすべて求め,int 型配列 c に格納する関数 void cd(int x, int y, int c[]) を作成せよ.
さらに,main 関数で 2つの自然数 x,y を入力させ,関数 cd を呼び出し,配列 c に格納されたすべての公約数を表示するプログラムを作成
という問題なのですが、この問題にめちゃくちゃ悩んでいて、どうにも一人ではできそうにないので、どうかご教授願います。
#include <stdio.h>
#include<math.h>
#define N 1000
int gcd( int x, int y );
void cd( int x, int y, int c[] );
int main( void )
{
int x, y, i;
int d[ N ];
printf( "自然数を大きい方を入力>>>" );
scanf( "%d", &x );
printf( "自然数を小さい方を入力>>>" );
scanf( "%d", &y );
cd( x, y, d );
return 0;
}
int gcd( int x, int y )
{
int a, b ,z;
y = 1;
for( a = 2; a <= x; a++ )
{
if( ( x % a == 0 ) && ( x % b == 0 ) )
{
y = x;
}
z = y;
}
return z;
}
void cd( int x, int y, int c[] )
{
int i, z, a, b;
for( i = 0; i < N; i++ )
{
c[ i ] = ( z = gcd( a, b ) );
if( y > 0 ){
printf( "a = %d, b = %dの時,公約数は %d ¥n", x, y, c[ i ] );
break;
}
else{
break;
}
}
}
さらに,main 関数で 2つの自然数 x,y を入力させ,関数 cd を呼び出し,配列 c に格納されたすべての公約数を表示するプログラムを作成
という問題なのですが、この問題にめちゃくちゃ悩んでいて、どうにも一人ではできそうにないので、どうかご教授願います。
#include <stdio.h>
#include<math.h>
#define N 1000
int gcd( int x, int y );
void cd( int x, int y, int c[] );
int main( void )
{
int x, y, i;
int d[ N ];
printf( "自然数を大きい方を入力>>>" );
scanf( "%d", &x );
printf( "自然数を小さい方を入力>>>" );
scanf( "%d", &y );
cd( x, y, d );
return 0;
}
int gcd( int x, int y )
{
int a, b ,z;
y = 1;
for( a = 2; a <= x; a++ )
{
if( ( x % a == 0 ) && ( x % b == 0 ) )
{
y = x;
}
z = y;
}
return z;
}
void cd( int x, int y, int c[] )
{
int i, z, a, b;
for( i = 0; i < N; i++ )
{
c[ i ] = ( z = gcd( a, b ) );
if( y > 0 ){
printf( "a = %d, b = %dの時,公約数は %d ¥n", x, y, c[ i ] );
break;
}
else{
break;
}
}
}