辗转相除法求最大公约数

今天在刷java算法题的时候做到了一个求最大公约数的题,一般思路都是从大到小遍历,在翻题解的时候看到了这个,就想记录一下

简介

辗转相除法,又名欧几里得算法,用于求两个数 a , b 的最大公约数(最大公因子),表达式为 gcd(a, b) = gcd(b, a % b) ,其中 gcd 是 Great Common Divisor (最大公约数) 的缩写。

关键就是理解 gcd(a, b) = gcd(b, a % b) 这个等式,即 a, b 的最大公约数等于 b 与 a / b 余数 的最大公约数相等。

直到最后那个使得余数为零的除数,此时最大公约数为此除数

这里可以举例来看:

比如:36与24  现已知36与24的最大公比为12

计算:

36 / 24 = 1.....12(余)

24 / 12 = 2.....0

//得 36与24最大的公约数为12

再比如

144与84

144 / 84 = 1.......60(余)

84  / 60 = 1.......24(余)

60  / 24 = 2.......12(余)

24  / 12 = 2.......0

//得最大的公约数为12

即最后使余数为0的除数即为所求

代码实现

//Java代码

import java.util.*;
public class Main
{
    static int gcd(int a,int b)
    {
        if(b>0) return gcd(b,a%b);   //辗转相除法
        else return a;
    }
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int x=sc.nextInt(),y=sc.nextInt();
        System.out.print(gcd(x,y));
    }
}
//C

void main()
{
 int a,b,c;
 printf("请输入两个整数:");
 scanf("%d%d",&a,&b);

if(a

你可能感兴趣的:(算法)