最大公约数问题

问题描述

求两个正整数的最大公约数(GCD),如果两个正整数都很大。

解决方法(辗转相除法)

描述:有f(x,y)表示x和y的最大公约数,对于k = x/y, b = x%y, x = ky+b,如果一个数能同时被x和y整除,则币能同时整除b和y。所以有如下递推公式f(x,y) = f(y,x%y)(x>=y>0),直到x、y的其中一个数为0,剩下的另一个数就是两者的最大公约数。由递推公式可以知道,y是不大于x的,所以最大公约数是当x%y为0的时候y的值。

代码

int gcd(int x,int y){
    return (!y)?x:gcd(y,x%y);
}

辗转相减法

描述:因为除法、取模的开销较大,所以可以使用辗转相减的方式进行,进行多几次递归但是可以避免每次递归所需要更多的计算方式。

代码

int gcd(int x,int y){
    if(x

你可能感兴趣的:(最大公约数问题)