アプリ版:「スタンプのみでお礼する」機能のリリースについて

二つの自然数を引数として与えられて,それらの最大公約数を返す関数
int gcd(int m, int n) { /* … */ }を作成し,それを利用して入力された二つの正整数の最大公約数を求めるプログラムを作り方を教えてください。

ユークリッドの互除法を使い、関数を使う事が条件なのですが全然わかりません。

#include<stdio.h>

int gcd(int m, int n)

if(m>n) {m%n}
          
if(m%n==0)
printf("最大公約数は%d",n); ←このあたりがわかりません

else if (n%(m%n))
printf("最大公約数は%d",n%(m%n));




int main( void )
{
int na, nb;
puts(""二つの整数を入力してください。);
printf("整数1:"); scanf("%d",na);
printf("整数2:"); scanf("%d",nb);

printf("最大公約数は%dです。\n",gcd(int m, int n));
return0;
}

A 回答 (3件)

《年寄りの小言》



・質問主旨とは無関係な不具合( scanf("%d",na);等)が多すぎます。
・自分の「作品」を投稿するのだから、コンパイラをとおして化粧しないと。
  (不明でメモ同然な部分は、「コメント」行としてコンパイル)

   return 0; でなく return0; であることは後述。
-----------------------------------------
《回答》

☆「ウィキペディア」で「最大公約数」、そこからのリンクで「ユークリッドの互除法」をたどると「アルゴリズム(◆)」まで載ってる。

 この平文をC言語にするだけ・・。「だけ」としましたが、「なぞなぞ」を解く感覚で。

★「コロンブスの卵」ということもあるのでソースを投稿します(Borland c++5.6.4)。
-----------------------------------------
《余談》

 下のソースは、main() の型を void としています。99年だったか、
 void main() が「処理系定義の方法」として、標準規格に追加(除く++)されましたが、

・void main() を「エラー」とする処理系ってあるのかなぁ。
-----------------------------------------
《質問者様への勧告》 ← (冗談です)

 ・int main( void ) を使い続けろ(温故)。

 ・return( 0 ); と括弧を付けなさい(中の 0 は詮索せず、まれに負の数としてみなさい)
-----------------------------------------
#include <stdio.h>
#include <math.h>

int gcd( int m, int n )
{
 m = abs( m ); // 正の整数
 n = abs( n ); //  〃

 while( m * n ){ // どちらも 0 でない間

  if( n > m ){

   n %= m; // ◆4.

   if( ! n ) return( m ); // ◆2.
  }
  if( m > n ){

   m %= n; // ◆4.

   if( ! m ) return( n ); // ◆3.
  }
 }
 return( -999 ); // ここにはこないが・・
}
void main()
{
 int iKekka;
 int na = 1071, nb = 1029; // 入力部割愛

 iKekka = gcd( na, nb );

 if( 1 == iKekka ) printf( "(%d,%d) は互いに素である。\n", na, nb );
 if( 1 != iKekka ) printf( "(%d,%d) の最大公約数は %d です。\n", na, nb, iKekka );
}
//注:インデントに全角空白を用いています。タブに一括変換して下さい。
    • good
    • 0

> ユークリッドの互除法を使い



手で互除法を使うことはできますか?
もしできるならば、その手順を忠実にコード化すれば完成です。
    • good
    • 0

>ユークリッドの互除法を使い、関数を使う事が条件なのですが


学校の課題ですか?
では丸投げ行為は禁止されているので、ソースコードを答えることはできません。

というか、検索ぐらいしたほうがいいですよ。
http://www.google.com/search?hl=ja&inlang=ja&q=C …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!