递归求最大公约数

 
import java.io.IOException;
import java.util.Scanner;
public class CommonDivisor {
    public static void main(String[] args)throws IOException{
        try{
             System.out.println("请输入两个整数!");
                Scanner input = new Scanner(System.in);
                int x = input.nextInt();
                int y = input.nextInt();
                System.out.println("两个整数的最大公约数为:" + gcd(x,y));
        }
        catch(Exception ex){
            System.out.println("需要输入的数为整数!");
        }
    }
    public static int gcd(int m,int n){
        int result = 0;
        if(m % n ==0){
            result = n;
        }
        else
            result = gcd(n,m % n);
        return result;

    }

}


用递归,求两个整数的最大公约数。

递归求最大公约数

时间: 2024-10-07 06:51:40

递归求最大公约数的相关文章

C语言 · 求最大公约数

算法提高 求最大公约数 时间限制: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

欧几里得求最大公约数--JAVA递归实现

欧几里得算法求最大公约数算法思想: 求p和q的最大公约数,如果q=0,最大公约数就是p:否则,p除以q余数为r,p和q的最大公约数即q和r的最大公约数. java实现代码: 1 public class Demo0 { 2 public static void main(String[] args) { 3 4 System.out.println(gcd(24,120)); 5 } 6 7 8 public static int gcd(int p,int q){ 9 10 if(q==0)

递归--练习3--noi7592求最大公约数问题

递归--练习3--noi7592求最大公约数问题 一.心得 两个低级错误:1. ll setMax(ll &m,ll &n)中无引用,结果只传值,没传地址2. return f(n,m%n);这句话忘记写return了 //保证结果能够一层层的返回 二.题目 7592:求最大公约数问题 总时间限制:  1000ms 内存限制:  65536kB 描述 给定两个正整数,求它们的最大公约数. 输入 输入一行,包含两个正整数(<1,000,000,000). 输出 输出一个正整数,即这两个

利用递归求两个数字的最大公约数。

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> //利用递归求两个数字的最大公约数. //公因数,如果一个整数同时是几个整数的约数,则这个整数为它们的"公约数" function getNum(a, b) { va

C语言求最大公约数和最小公倍数

求最大公约数和最小公倍数 假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因为 a=m*i; b=m*j; 最小公倍数为 m*i*j 那么,下面就开始计算a和b的最大公约数. 更相损减法: <九章算術·方田>作分數約簡時,提到求最大公因數方法:反覆把兩數的較大者減去較小者,直至兩數相等,這數就是最大公因數.這方法除了把除法換作減法外,與輾轉相除法完全相同.例如書中求91和

辗转相除求最大公约数

序 求最大公约数的最常用的算法是欧几里得算法,也称为辗转相除法.问题定义为求i和j的最大公约数gcd(i,j),其中i和j是整数,不妨设i>j.算法可以递归的表示:1. 如果j能整除i,那么gcd(i,j)=j: 2. j不能整除i,令r=i%j,那么gcd(i,j)=gcd(j,r). C实现 int gcd(int i, int j) { int r = i % j; return r == 0 ? j : gcd(j, r); } 分析 算法的步骤1,显然成立(最大公约数定义): 要证明步

欧几里得算法求最大公约数+最小公倍数

1,两个数互质:如果说两个数的公因数只有1,则可以说这两个数互质. 欧几里得算法求最大公约数: 首先求最大公约数,假设我们要求a和b的最大公约数 设a mod b = c: 可以得到一下的递推过程: a = kb + c ; 假设a , b 的最大公约数为d,则可以得到: a = md , b = nd; 可知m , n 互质: c = a - kb = md - knd = (m-kn)d; 我们已经知道m,n互质,则可以知道n和m-kn互质,则c和b的最大公约数也是d; 所以由以上的推论,我

[转]求最大公约数的算法

更相减损术 更相减损术,又称"等值算法" 关于约分问题,实质是如何求分子,分母最大公约数的问题.<九章算术>中介绍了这个方法,叫做”更相减损术”,数学家刘徽对此法进行了明确的注解和说明,是一个实用的数学方法. 例:今有九十一分之四十九,问约之得几何? 我们用(91,49)表示91和49的最大公约数.按刘徽所说,分别列出分子,分母. “以少减多,更相减损,求其等也,以等数约之,等数约之,即除也,其所以相减者皆等数之重叠,故以等数约之.” 译文如下: 约分的法则是:若分子.分母

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

预备知识 因子(除数) 如果有整数 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既不是素数,也不是合