• ベストアンサー

ユークリッドの互助法って何でしょか?

ymmasayanの回答

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

簡潔に説明しましょう。 ユークリッド・・大昔の数学の大家。ユークリッド幾何学、非ユークリッド幾何学の名で有名。 ユークリッドの互除法・・2つの数の最大公約数を求めるのに、最も早い、すばらしい方法。互除法というのはお互いに除算(割り算)をすると言う意味。互助法ではありません。 [ユークリッドの互除法] (1)2つの数を、A、Bとします。仮にAが大きいとします。 (2)AをBで割って余りをRとします。 (3)Rが0なら、Bが答え(最大公約数)で終わり。 (4)BとRのうち大きいほうをAに入れ、小さいほうをBに入れます。 (5)前の(2)へ飛びます。 例をあげましょう。A=18、B=12とします。 R=mod(18,12)=6 A=12、B=6 R=mod(12,6)=0 → 終わり  B=6が答え(最大公約数) どうです。簡単でしょう。 割り算の代わりに引き算を繰り返し使う方法もあります(CASLなどでは) この問題で、再帰処理を使うメリットは感じませんが、練習として使う事は可能です。再帰処理は質問に入っていないので、省略します。過去にも再帰処理の質問は出ています。頑張ってください。

sonicgear
質問者

お礼

 ご回答どうも有り難う御座いました! ナカナカ分かり易かったです。 感謝です。   

関連するQ&A

  • 再帰関数とユークリッドの互除法を用いて最大公約数を求める

    学校の課題で、再帰関数とユークリッドの互除法を用いて10~100000までの最大公約数を求めるという問題が出て自分でプログラムを作ってみたのですが無限ループに入ったり、関数が使えてないみたいでできません。プログラムを見て頂いて、どこを改善したらいいかを教えてください。 #include <stdio.h> /* 正整数 n, m の最大公約数を計算する */ int gcd(int n, int m) { int res; res = n % m; if (res == 0) return m; /* 最大公約数が求まった */ return gcd(m, res); /* 再帰呼び出し */ } int main(void) { int i,j; for(i=10000;i>=10;i--){ for(j=10;j=10000;j++){ printf("%d to %d no saidaikouyakusuu ha %d \n", i, j, gcd(i, j)); } } return (0); } です。期限が今日の夜までで、ぎりぎりなんですがよろしくお願いします。

  • 再帰呼びだし

    再帰呼びだし 問題1 再帰呼び出しを用いてint型の配列({-9、8、-7、6、5、4、1、3、6、9、2、-14})の最小値を求めて出力するプログラムを作成せよ。関数名はmin_of_arrayとする。 問題2 同じく再帰呼び出しを用いてint型の配列({3、4、1、5、2})を小さい方から順番に求めて出力するプログラムを作成せよ。 再帰呼び出しが苦手で、じっくり解いていこうと思ったのですが、他の課題もあって、もう提出期限いっぱいいっぱいなので載せました。 どうかよろしくお願いします。

  • ユークリッドの互助法

    ユークリッドの互助法を最初に知ったのはいつのことですか? なぜこんなことを聞くかというと、高校までに授業で習った記憶がないからです。 重要なので中学校くらいで習っててもおかしくないかなと。 学校によりけりなんでしょうか?

  • C++でforや再帰関数を使わずに、総当りする方法はありますか?

    C++等で、forを使わず、再帰関数を使わずに多量のループで総当りする方法はありますでしょうか? 自己末尾再帰関数というのがネットで出てきますが、C言語系では使えないみたいです。 再帰関数で変数を全てスタティックにしても、関数の多重呼び出しで容量を食ってプログラムが動かないほどの計算をこなす必要があるのですが、こういった多数の桁のやり方になれておらず、先が見えません… また、全部をforにするのも、桁が大きすぎて問題があります。 どなたかご教授くださいますと幸いです。

  • 再帰呼び出しを用いるnPk,nCk 計算プログラム作成

    javaで再帰呼び出しを用いるnPk,nCk計算プログラム作成したいです。 同じクラスでnPk,nCkを求める事です。 再帰呼び出しで nからkを求める事ができないです。ひとつだけなら できますがふたつを一緒に求める事ができません。 なんか方法がないでしょうか?お願いいたします。 結果は 引数nとk値で、 nPk、nCkの計算結果を出したいです。

  • 拡張ユークリッド互助法

    拡張ユークリッド互助法の使い方、ユークリッドの互助法からの導き方を教えてください。

  • 拡張ユークリッド互助法

    拡張ユークリッド互助法の使い方、ユークリッドの互助法からの導き方を教えてください

  • 基本情報技術者を受験できたら、と考えているのですが

    基本情報技術者を受験できたら、と考えているのですが こんにちは、2010年1月末のJava2級に合格し、 できれば、秋期の基本情報技術者の受験を目指して、教科書や、過去問に 取り組み始めた者です。 その過程において、わからないことが出てきましたので、質問させていただきます。 「プログラミング」の「プログラミングの特徴」についてですが、教科書には、 「再使用可能プログラム」「再入可能プログラム」「再配置可能プログラム」 「再帰呼び出し可能プログラム」が記載されていたのですが、 これらは、ソースコードの記述の仕方、と捉えても問題はないのでしょうか? 「再帰呼び出し可能プログラム」は、例えば「階乗の解を求める」というのが 対応するのでしょうか? 「再使用可能プログラム」の説明において、 プログラムは「実行中に初期設定値などを書き換えてしまうと、 もう一度ロードしなおしてから実行する」とあったのですが、 変数などの値が変わった場合、ということでしょうか? あるいは、さまざまなプログラミング言語を定義する側の人が、このような特徴を 取り入れる、ということでしょうか? それとも、最近のパソコンではどのような言語も、このような特徴を 備えているということでしょうか? まったく的外れな質問かも知れませんが、もしよろしければ教えていただけないでしょうか よろしくお願いします。

  • Mac10.6.3からのアップデート。

    現在使用中のMacは10.6.3です。少し前までは10.6.8だったのですが 「Mac os 統合アップデート」を推奨されていたので、アップデートを かけたら、するとなぜかsafariをクリックすると即エラーメッセージ(予期せぬ理由) という状態になりました。それでやむなく、再インストールでこの問題を 解消させたのですが、10.6.8が10.6.3に戻ってしまいました。 知識がないので、説明も分かりにくいかもしれませんが、ざっくりと申しますと 「10.6.3の現状から10.7にしたい」ということです。 方法はあるのでしょうか?こちらとして試みた事は、現状10.6.3なので10.6.4に まずはアップデートしてみようとしましたが、「出来ません」とのメッセージが 表示されてしまい八方塞がりでしす。 何とぞ、ご教授願います。

    • ベストアンサー
    • Mac
  • IT営業としての知識を身につけたい

    もともとITに詳しい方ではありませんでしたが、 やったことのないことができると感じ 全くの未経験からIT営業に転職して数か月経つのですが、 ITの知識がさっぱり身につきません。 IT用語も1つわからない単語を調べると、 また3つくらい分からない言葉で説明されます。イメージも湧きません。 お客さん(技術者)に聞かれる質問(サーバーやらセキュリティやら)にも答えられないことが多く、 勉強のために始めたwordpressも、進めるにつれ分からないことばかりで 八方ふさがりです。 何かこういった知識を初歩からきちんと学べる方法や サイトなどがあればとても知りたいです。 よろしくお願いします。