C言語超入門(3)
[TOP]

C言語超入門(3)


二つの整数の最大公約数を求めるプログラム

 次に示すプログラムは,入力された二つの整数の最大公約数を求めるプログラムです.

    #include <stdio.h>
    #include <stdlib.h>

    void main()
    {
         int x,y,z;

         printf( "一つ目の整数を入力してください:" );
         scanf( "%d", &y );
         printf( "二つ目の整数を入力してください:" );
         scanf( "%d", &x );

         while( x % y != 0 )
         {
             z = x % y;
             x = y;
             y = z;
         }
         printf( "最大公約数は %d です\n", y );
    }

三つの整数の最大公約数を求める

 次に三つの整数の最大公約数を求めるプログラムを作ってみます. 三つの整数の最大公約数はどのように求められるでしょうか. たとえば,30 と 24 と 12 の最大公約数を考えてみます. これらの整数は,

 210 = 2 * 3 * 5 * 7
 168 = 2 * 2 * 2 * 3 * 7
  12 = 2 * 2 * 3

と分解できます.共通する約数は,2 と 3 ですので,最大公約数は 6 となります. このとき,2 と 3 は,210 と 168 の約数にもちろん含まれていますから, 210 と 168 の最大公約数(42 = 2 * 3 * 7)に含まれます. 逆に言えば,210 と 168 の最大公約数に含まれない約数は, 絶対 210 と 168 と 12 の最大公約数に含まれることはありません. したがって,210 と 168 と 12 の最大公約数を考えるときは, 210 と 168 の最大公約数(42)と 12 の最大公約数を考えればよいわけです.

 ここまでの説明で,三つの整数の最大公約数を求める方法がわかったと思います. まず二つの整数の最大公約数を求め, 次に,その最大公約数と三つ目の整数の最大公約数を求めればよいわけです. プログラムの流れ,プログラム例を次に示します.

    #include <stdio.h>
    #include <stdlib.h>

    void main()
    {
         int x,y,z;

         printf( "一つ目の整数を入力してください:" );
         scanf( "%d", &y );
         printf( "二つ目の整数を入力してください:" );
         scanf( "%d", &x );

         while( x % y != 0 )
         {
             z = x % y;
             x = y;
             y = z;
         }

         printf( "三つ目の整数を入力してください:" );
         scanf( "%d", &x );

         while( x % y != 0 )
         {
             z = x % y;
             x = y;
             y = z;
         }

         printf( "最大公約数は %d です\n", y );
    }

複数の整数の最大公約数を求めるプログラム

 次に,複数の整数の最大公約数を求めるプログラムを考えてみます. 三つの整数の最大公約数を求める方法と同様に, まず,最初の二つの整数の最大公約数を求めます. 次に,その最大公約数と三つ目の最大公約数を求めます. 次に,その最大公約数と四つ目の最大公約数を求めます. 次に,・・・,というように繰り返せばよいのです.

 最初に整数の個数 n を入力するようにすると,プログラムはどのような流れになるでしょうか. 三つの整数のときを参考にすると,次のような感じになるでしょう.

このままではプログラムを書くことができません. 整数の個数が決まらないと, 整数の入力と最大公約数を求める部分がいくつ必要かが決まりませんが, 整数の個数はプログラムが実行されるまで決まらないからです.

 これを解決するためには,この流れの中で繰り返し行っている部分を, 繰り返し構文(ループ)を使えばうまくいきます. ループを使った場合の流れ図を次に示します.


演習

 先の流れ図を参考に,複数の整数の最大公約数を求めるプログラムを作りなさい.


[TOP] [BEFORE] [NEXT]
(C)2002 Naoki Kato