各种求最大公约数的函数

GCD 求最大公约数函数

方法总结

  • 递归版
int gcd(int x, int y)
{
    if(y==0) return x;
    return gcd(y, x%y);
}
  • 简介递归版
int gcd(int x, int y)
{
    return y>0? gcd(y, x%y) : x;
}
  • 非递归版
int gcd(int x, int y)
{
    int tmp;
    while(y>0)
    {
        tmp=x%y;
        x=y;
        y=tmp;
    }
    return x;
}
  • \(algorithm.h\)头文件中的函数
__gcd(x, y) //注意是两个下划线,这个可以直接调用,返回x和y的最大公约数
    //但是有些oj上不支持这个,还有说这个函数不是标准函数,需要注意。

原文地址:https://www.cnblogs.com/alking1001/p/11406175.html

时间: 2024-09-29 01:18:48

各种求最大公约数的函数的相关文章

提高篇项目3(1)——求最大公约数

任务及要求 /* *Copyright (c)2016,csdn学院 *All rights reserved. *文件名称:lzz.c *作 者:兰泽泽 *完成日期:2016年5月8日 *版 本 号:v1.0 *问题描述:求最大公约数 (1)输入两个数,并求出其最大公约数.请写出求最大公约数的函数 (2)在上面程序基础上,增加函数gcds函数的声明和定义,实现求4数最大公约数的功能 *程序输入 *程序输出: */#include <stdio.h> int gcd(int x,int y)

提高篇项目3(2)——求最大公约数

任务及代码 /* *Copyright (c)2016,csdn学院 *All rights reserved. *文件名称:lzz.c *作 者:兰泽泽 *完成日期:2016年5月8日 *版 本 号:v1.0 *问题描述:求最大公约数 (1)输入两个数,并求出其最大公约数.请写出求最大公约数的函数 (2)在上面程序基础上,增加函数gcds函数的声明和定义,实现求4数最大公约数的功能 *程序输入 *程序输出: */#include <stdio.h> int gcd(int x,int y)

一个好的函数(gcd)求最小公约数

这个函数是我无意中看到的很不错,很给力,我喜欢 是用于求最小公约数的 简单的描述就是,记gcd(a,b)表示非负整数a,b的最大公因数,那么:gcd(a,b)=gcd(b,a%b)或者gcd(a,0)=gcd(0,a)=a 请看代码 int gcd(int a,int b){ if(a==0) return b; if(b==0) return a; return gcd(b,a%b);} 例题 链接 http://acm.hdu.edu.cn/showproblem.php?pid=1108

求两个正整数的最大公约数的函数

求最大公约数的欧几里得算法是一个递归算法,据说出现在公元前375年,或许是最早的递归算法实例: gcd(x, y) =  x ;                            (y = 0) = gcd(y, x mod y);         (y > 0) 注:mod是求模,相当于程序中的%. int gcd(int x, int y)                    //最终返回x,y的最大公约数 { return y?gcd(y, x/y):x;        //递归,用

辗转相除 求最大公约数!or 最小公倍数

求最大公约数和最小公倍数的经典算法--辗转相除法描述如下: 若要求a,b两数的最大公约数和最小公倍数,令a为a.b中较大数,b为较小数,算法进一步流程: while(b不为0) { temp=a%b: a=b: b=temp } 最后a即为两数的最大公约数,最大公倍数为: a*b/最大公约数 c语言代码: 01.int divisor (int a,int b) /*自定义函数求两数的最大公约数*/ 02.{ 03. int temp; /*定义整型变量*/ 04. if(a<b) /*通过比较

C语言 &#183; 求最大公约数

算法提高 求最大公约数 时间限制:1.0s   内存限制:512.0MB 编写一函数gcd,求两个正整数的最大公约数. 样例输入: 5 15样例输出:5 样例输入: 7 2样例输出:1 作者注释:常用两种方法:递归法,相减法. 递归法代码: 1 #include<stdio.h> 2 //递归求最大公约数 3 int gcd(int m,int n) 4 { 5 return n==0?m:gcd(n,m%n); 6 } 7 int main(){ 8 int m,n; 9 scanf(&qu

【算法】欧几里德算法--求最大公约数

预备知识 因子(除数) 如果有整数 n,a,b .a和b都不为0 ,且 有 n = a*b ,则说a(或者b,以下省略说明)为n的一个因子,或者说a能整除n. 特别的:任何非0整数都是0的因子,所以一般我们不会去求0的因子. 如:3 的因子有  1, -1 ,  3 ,  -3 .然而我们一般只考虑正数因子,因为负数因子和正数因此没有本质上的区别,只是符号不同而已. 素数:素数(也加叫质数)的定义是,如果整数p的因子 只有 ±1 和   ±p,则它就是素数 .特别的:0 和1既不是素数,也不是合

求最大公约数问题

描述 给定两个正整数,求它们的最大公约数. 输入输入一行,包含两个正整数(<1,000,000,000).输出输出一个正整数,即这两个正整数的最大公约数.样例输入 6 9 样例输出 3 提示求最大公约数可以使用辗转相除法:假设a > b > 0,那么a和b的最大公约数等于b和a%b的最大公约数,然后把b和a%b作为新一轮的输入.由于这个过程会一直递减,直到a%b等于0的时候,b的值就是所要求的最大公约数.比如:9和6的最大公约数等于6和9%6=3的最大公约数.由于6%3==0,所以最大公

化简分式(求最大公约数).c

1 //约分最简分式 2 //先求最大公约数,然后将分子分母同时除以最大公约数 3 4 #include <stdio.h> 5 int main(){ 6 int numerator,denominator,temp,a,b; 7 char c; 8 scanf("%d%c%d",&numerator,&c,&denominator); 9 a=numerator; 10 b=denominator; 11 12 while(b!=0){ 13 t