首页 > 其他分享 >更相减损法

更相减损法

时间:2023-04-23 19:47:55浏览次数:27  
标签:return gcd 更相 int 减损 减数

更相减损法(求最大公因数的另一种写法)

思路:

1.如果两数相等,返回其中一个
2.如果两个数都是偶数,那么同时除以2,否则进入3
3.将两数中大者减去两数中小者,然后再用差值和减数中的大者减小者,直到差值和减数相等
4.将除以2时所除去2的积乘以等数(最后差值和减数相等的值)即为最大公因数

int gcd(int x, int y) {
	if (x == y) return x;
	else if (x > y) return gcd(x - y, y);
	else return gcd(x, y - x);
}

缺点

如果遇到大数时,可能要减很久,时间复杂度接近\(O(n)\)

标签:return,gcd,更相,int,减损,减数
From: https://www.cnblogs.com/lbzbk/p/17347505.html

相关文章

  • 欧几里得算法与更相减损法复习
    (1)欧几里得算法(辗转相除法),用于求两个整数的最大公因数解释:两个整数a和b,假如a=b*x+ya和b的最大公因数是d,那么a%d==0,b%d==0,也有(b*x+y)%d==0∴y%d==0即a和b的最大公因数也是b和y的最大公因数,而y=a%b1intgcd(inta,int......
  • C语言填空:减损法求最大公约数
    #include<stdio.h>//<<九章算术>>更相减损法:可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。//以等数约之。///第......
  • A 不断减损的时间【2023牛客寒假算法基础集训营3】
    A 不断减损的时间原题链接代码点击查看代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#includ......
  • 最大公约数_辗转相除法_更相减损术_原理
    辗转相除法算法使用要计算\(a\)与\(b\)的最大公约数,且\(a\÷\b=q\cdotsr\\\(a>=b)\).若\(r\not=0\),可将计算\(a\)与\(b\)的最大公约数,转为计算\(......
  • 最大公约数 C/C++ leetcode , 辗转相除,更相减损
    #include <iostream>using namespace std;// 辗转相除法求最大公约数,用大的模小的,然后用除数模余数,该接口在新版的C++17的numeric 包中也有int gcd1(int a ,......
  • C语言:九章算术:更相减损法求最大公约数 函数写法
    #include<stdio.h>//<<九章算术>>更相减损法:可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。//以等数约之。///第......
  • C语言:九章算术更相减损法求最大公约数
    #include<stdio.h>//<<九章算术>>更相减损法:可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。//以等数约之。///第......