- ベストアンサー
最大公約数と最小公倍数の問題 php
- 最大公約数と最小公倍数を求める問題を解くための処理が理解できません。具体的には、return _gcd($b, $a % $b); の部分がわからないです。例えば、$bに6、$aに8が入っていた場合、この処理は何を返すのでしょうか?
- $bと$aを最大公約数を求めるために再帰的に渡す処理です。具体的には、$bには$aを、$aには$aを$bで割った余りを渡しています。
- この処理は、$bが0になるまで繰り返されます。最終的には、$bが0になると、$aが最大公約数となります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- 最大公約数を出すには?
こんにちは。 過去ログを見てみましたが、まだ知らない言葉が出てきていて理解できませんんでした。なるべくなら、簡単な方法で出すやり方を教えてください。 ちなみに公約数の表示は以下のようにしてできました。if、while、forぐらいなら使えます。 明日までの課題なので、できるだけ今日中に答えてくださったら、とても助かります。 よろしくお願いします。 #include <stdio.h> main() { int a,b,i; i=1; printf("a="); scanf("%d",&a); printf("b="); scanf("%d",&b); while((i<=a)&&(i<=b)){ if((a%i==0)&&(b%i==0)) {printf("Answer=%d\n",i);i=i+1;} else{i=i+1;} } }
- ベストアンサー
- C・C++・C#
- a,bの最大公約数を求める関数をつくってみたのですが、aまたはbが零の
a,bの最大公約数を求める関数をつくってみたのですが、aまたはbが零の時の処理としては、どのようにするのが適当かがわかりません。ある数と零の最大公約数ってどうなるんでしょうか? #include <iostream> using namespace std; // 整数 a, b の最大公約数を求める int gcd(int a, int b) { if(b == 0) return -1; // この戻り値は適当なのか? int r = a % b; // aをbで割った余り if ( r == 0 ) return b; // 余りが0ならbが最大公約数である else return gcd(b,r); // 余りが0でなければbとrの最大公約数を返す } int main() { cout << "gcd(1000,100) = " << gcd(1000, 100) << endl; return 0; }
- 締切済み
- C・C++・C#
- 最大公約数を再帰で求める(pascal)
入力した整数値の最大公約数を出力するプログラムを再帰呼び出しの形式で作れ、という課題が出ました。 再帰でない形式は下のように作れたのですが、再帰形式がどうしてもできません。どなたかご教授ください。 function gcd(a,b:integer):integer; {関数部} var tmp:integer; begin if a<b then begin tmp:=b; b:=a; a:=tmp end; repeat tmp:=b; b:=a mod b; a:=tmp until b=0; gcd:=a end; repeat {計算部、i=n=入力した個数、max=入力できる最大数} i:=i+1; n:=n+1; data[i]:=x; writeln('値:'); readln(x); until (x=0) or (i=max); if i>=2 then begin p:=gcd(data[1],data[2]); if i>=3 then begin for i:= 3 to n do begin p:=gcd(p,data[i]) end; writeln('最大公約数:',p) end else begin writeln('最大公約数:',p) end;
- ベストアンサー
- その他(プログラミング・開発)
- accessで最小公倍数を求める
ACCESSで最小公倍数を求めた値をセットしたいのです データとしては キー項目 数値 A 2 A 3 A 2 B 1 B 3 C 2 とあったとしてキー項目単位で求めた最小公倍数をセットしたデータを updateしたいのです キー項目 数値 最小公倍数 A 2 6 A 3 6 A 2 6 B 1 3 B 3 3 C 2 2 このような更新クエリーを作りたいのですが 最小公倍数の関数がEXCELならLCMというのがあるみたいですが ACCESSには見つからなかったので・・・ データが大量にあるのでACCESSで処理したいのですが いい方法がありましたらアドバイス下さい
- ベストアンサー
- その他(データベース)
- 倍数の問題
次の問題は小学校5・6年の参考書に載ってあったのですが、この問題を見て疑問に思ったことがあります。 【問題】12,18のどちらで割っても3余る数のうち、最も小さい整数を求めなさい。 この問題は、どちらで割っても余りが同じになるので、最小公倍数をgcd(a,b)で表すとすると、 gcd(12,18)+3=39 で解けるのですが、 (割ると3余るということは、割られる数は割る数の倍数より3大きいということになるから。) 余る数が違ったらどうやって解くんだ!!という疑問が生まれてしまいました。 問題にしてみると、次のようになります。 【問題】aで割ると余りがpになり,bで割ると余りがqになる数のうち、n番目の整数を求めよ。 ただし、最小公倍数をgcd(a,b)で表すものとする。 条件を満たす整数を1番目に限定しないようにしました。 これがp=q=rなら、gcd(a,b)n+rで簡単に求められるのですが、上のように余りが異なる場合はどうやって求めれば良いのでしょうか?
- ベストアンサー
- 数学・算数
- 再帰関数とユークリッドの互除法を用いて最大公約数を求める
学校の課題で、再帰関数とユークリッドの互除法を用いて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); } です。期限が今日の夜までで、ぎりぎりなんですがよろしくお願いします。
- ベストアンサー
- C・C++・C#
- VBA と JIS Full BASIC
下のJIS Full Basic スタイルとだいたい同じようなコードを VBA で書いたのですが Z = Sqr(x^2 + y^2) のところでエラーが出ます。どこがおかしいのでしょうか。 Function gcd(a, b) Do While b <> 0 r = a Mod b a = b b = r Loop gcd = a End Function Rem 既約なピタゴラス数を求める Sub Pythagoras() LAST = 200 LAST = 200 For x = 1 To LAST For y = x + 1 To LAST Z = Sqr(x^2 + y^2) 'ここでコンパイルエラーが出る If Int(Z) = Z Then If gcd(x, y) = 1 And gcd(x, z) = 1 And gcd(y, z) = 1 Then Debug.Print x & ", " & y & ", " & z End If End If Next y Next x End Sub ---------------------------- JIS Full Basic スタイルのコード REM ピタゴラス数 FUNCTION gcd(a,b) DO WHILE b <> 0 LET r = MOD(a,b) LET a = b LET b = r LOOP LET gcd = a END FUNCTION LET LAST = 200 FOR x = 1 TO LAST FOR y = x + 1 TO LAST LET z = SQR(x^2+y^2) IF INT(z) = z THEN IF gcd(x,y) = 1 AND gcd(x,z) = 1 AND gcd(y,z) = 1 THEN PRINT x,y,z END IF END IF NEXT y NEXT x END
- ベストアンサー
- Visual Basic
- 最大公約数、定理の証明
a,bを a=b=0 でない2つの整数とするとき a*r + b*s =(a,b) のような整数 r,s が存在する --------------------------------------- という定理があって、この定理を使って 次の定理を証明せよ、という問題なのですが… d=(a,b) 整数 n は、 n|d のとき、その時に限り a と b の公約数である … n|d は dはnで割り切れるという意味 どういうふうに導くのかわかりません。 d=(a,b)= a*r + b*s = t*n (tは整数) とおく、ここまで何となくやってみたのですが… 「公約数」であることを示す方法、目標が見えません。 教えてください。
- ベストアンサー
- 数学・算数
お礼
ご丁寧に対応していただいて、ありがとうございます。 とても、分かりやすかったです。 親切にありがとうございます。