最大公約数アルゴリズムをユークリッド
知ら:A / B = C ...... R(A、B、C、Rは整数です)
仮説:Dは、Aの残りの部分であり、DはBの残りの部分では、DはAとBの除数であります
Dは、AとBの除数は、A及びBはDの倍数であり、B * CはDの倍数であります
AおよびDは、次にAとB * C B * C、の各倍数であるので、差 D ISの倍数で
A - B * C = R
したがって、DはRの倍数であります
Dが、AまたはBの除数である場合、Bはまた、除数Dであり、そしてR
故:(A,B)= (B,R)
それ以上の最大公約数が得られていることを証明することができますから、
例:72と28の最大公約数
28分の72 = 2 ...... 16
↓↓↓↓
16分の28 = 1 ...... 12
↓↓↓↓
12分の16 = 1 ...... 4
↓↓↓↓
12月4日= 3 ...... 0
私たちは今、72と28であるの最大公約数を知ることができます4
1の#include <stdio.hの> 2 INT メイン(){ 3 int型 A; // 除数 4。 int型の B; // 配当 。5 INT R&LT = 1 ; // 残りは、初期値が与えられている1。 6。 のprintf(" 入力除数と(スペースで区切られた)配当:" ); 7 scanfの(" %D%D "、&A、&B); 8 ながら!(R&LT = 0){ // 計算に<Bであれば、また逆ABことなく、サプライヤー自身よりも0除数は、次の計算に戻ってから逆転させることができる 9 %A = R&LT B; 10 A = B、 11 B = R&LT; 12である } 13で のprintf(" の最大公約数:D%\ N- "); // この時点ではそうでbの値を有しますこれは、出力の最大公約数である 14 リターン 0 ; 15 }