数论之最大公约数和最小公倍数

来源:互联网 发布:程序员怎么挣钱 编辑:程序博客网 时间:2024/06/05 18:19

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1.最大公约数                                                                                                                                                                                                                                                                                             </span>

1.1 辗转相除法f(x,y)=f(x,x%y), f表示最大公约数函数:k=x/y;b=x%y;则z=k*y+b. 所以一个数能够被x, y 同时整除,则这个数也同时能够被y, x%y 整除。

int gcd(int x, int y){int temp;while(y){temp=x%y;x=y;y=temp;}return x;}int gcd_recursion(int x, int y){return (!y)?x:gcd_recursion(y,x%y);}


1.2 辗转相减法,一个数能够被x, y 同时整除,则这个数也同时能够被y, x-y 整除


int gcd_subtraction(int x, int y){int temp;        while(y){if(x>y){temp=x-y;x=y;y=temp;}else{temp=y-x;y=x;x=temp;}}return x;}int gcd_subtraction_recursion(int x, int y){if(x<y)return gcd_subtraction_recursion(y,x);    return (!y)?x:gcd_subtraction_recursion(y,x-y);}
2.最小公倍数=积 除以 两数的最大公约数 : u=(a*b)/f(a,b)

int lcm(int x, int y){int z=gcd(x,y);return x*y/z;}



0 0
原创粉丝点击