GCD三部曲之一---辗转相除法

大概的题目就是输入两个数,求他们的最大公约数。

一个简单的递归。代码见下↓↓↓

 1 #include <iostream>
 2
 3 using namespace std;
 4 int a,b;
 5 int gcd(long long a,long long b)
 6 {
 7     if(b==0) return a;
 8     return gcd(b,a%b);
 9 }
10 int main()
11 {
12     scanf("%d%d",&a,&b);
13     int c=gcd(a,b);
14     printf("%d",c);
15     //system("pause");
16     return 0;
17 }

辗转相除法

时间: 2024-10-05 14:06:48

GCD三部曲之一---辗转相除法的相关文章

Leetcode: Water and Jug Problem &amp;&amp; Summary: GCD求法(辗转相除法 or Euclidean algorithm)

You are given two jugs with capacities x and y litres. There is an infinite amount of water supply available. You need to determine whether it is possible to measure exactly z litres using these two jugs. If z liters of water is measurable, you must

ACM数论之旅3---最大公约数gcd和最小公倍数lcm(苦海无边,回头是岸( ̄? ̄))

gcd(a, b),就是求a和b的最大公约数 lcm(a, b),就是求a和b的最小公倍数 然后有个公式 a*b = gcd * lcm     ( gcd就是gcd(a, b), ( •?∀•? ) 简写你懂吗) 解释(不想看就跳过){ 首先,求一个gcd,然后... a / gcd 和 b / gcd 这两个数互质了,也就是 gcd(   a / gcd ,b / gcd  )  =  1,然后... lcm = gcd *  (a / gcd) * (b / gcd) lcm = (a *

最大公约数gcd和最小公倍数lcm

gcd(a, b),就是求a和b的最大公约数 lcm(a, b),就是求a和b的最小公倍数 然后有个公式 a*b = gcd * lcm     ( gcd就是gcd(a, b), ( •?∀•? ) 简写你懂吗) 解释(不想看就跳过){ 首先,求一个gcd,然后... a / gcd 和 b / gcd 这两个数互质了,也就是 gcd(   a / gcd ,b / gcd  )  =  1,然后... lcm = gcd *  (a / gcd) * (b / gcd) lcm = (a *

数论——gcd&amp;&amp;lcm

gcd(a, b),就是求a和b的最大公约数 lcm(a, b),就是求a和b的最小公倍数 然后有个公式 a*b = gcd * lcm     ( gcd就是gcd(a, b), ( ????? ) 简写你懂吗) 解释(不想看就跳过){ 首先,求一个gcd,然后... a / gcd 和 b / gcd 这两个数互质了,也就是 gcd(   a / gcd ,b / gcd  )  =  1,然后... lcm = gcd *  (a / gcd) * (b / gcd) lcm = (a *

2015ACM/ICPC亚洲区沈阳站

5510 Bazinga 题意:给出n个字符串,求满足条件的最大下标值或层数 条件:该字符串之前存在不是 它的子串 的字符串 求解si是不是sj的子串,可以用kmp算法之类的. strstr是黑科技,比手写的kmp快.if(strstr(s[i], s[j]) == NULL),则Si不是Sj的子串. 还有一个重要的剪枝:对于一个串,如果当前找到的串是它的母串,则下一次这个串不用遍历. 1 #include <set> 2 #include <queue> 3 #include &

铁板铮铮♂+习题集

数论 快速幂 当b为偶数:ab=ab/2 * ab/2 当b为奇数:ab=ab/2 * ab/2 * a 核心代码: int quickpow(int a,int b) { int ret=1; for(;b;b>>=1)//如果b不等于0 b除2 { if(b&1)//b是奇数 ret=ret*a%n; a=a*a%n; } return ret; } 习题集 题目号 题目名 注释 洛谷P1965 [NOIP2013TG]转圈游戏 简单推导公式 洛谷P3197 [HNOI2008]越

数学知识小结#1

PREFACE 时隔数月尝试拾起以往的OI知识发现异常的艰难,于是准备慢慢的填坑,可能比较简略并且穿插不少英文(万一面试的时候问起OI还能说几句pao),但是我英语太菜了,如果您发现了错误或是需要改进的地方,欢迎联系我或是在下方评论 小结#1主要是数论部分,小结#2到时看情况在更吧 update:里面的除法都是指下取整 质数与约数Prime Number&Divisors 质数筛法Sieve 埃拉托斯特尼筛法Sieve of Eratosthenes 主要思想是任意整数x的倍数2x,3x...都

java 求最大公约数

public class Main { public static void main(String[] args) { System.out.println(gcd(4,8)); }//辗转相除法 public static int gcd(int x, int y){ if(y == 0) return x; else return gcd(y,x%y); }} 原文地址:https://www.cnblogs.com/sgbe/p/11413331.html

最大公约数(gcd)和 最小公倍数(lcm)——辗转相除法

辗转相除法(又称欧几里得算法)是求最大公因数的算法 要求a,b的最大公约数(a>b),我们可以递归地求b,a%b的最大公约数,直到其中一个数变成0,这时另一个数就是a,b的最大公约数. C++实现: int gcd(int a,int b){ retuen b?gcd(b,a%b):a; } 或: while(b!=0)  {  temp=a%b;   a=b;   b=temp; } 证明:(引自百度百科) 设两数为a.b(b<a),用gcd(a,b)表示a,b的最大公约数,r=a (mod