7. 最大公约数(辗转相除法)

题目描述 Description

求两个数A和B的最大公约数。 1<=A,B<=2^31-1

输入描述 Input Description

两个整数A和B

输出描述 Output Description

最大公约数gcd(A,B)

样例输入 Sample Input

8 12

样例输出 Sample Output

4

自己的答案:

#include

using namespace std;

#include

long long a,b,yu;

int main()

{

cin>>a>>b;

if(a

swap(a,b);

yu=a-b;

while(yu!=0)

{

a=b;

b=yu;

if(a

swap(a,b);//不要忘记,始终让a大于b才行,

yu=a-b;

}

if(yu==0)

printf("%d",b);

return 0;

}

时间: 2024-08-25 04:08:24

7. 最大公约数(辗转相除法)的相关文章

从错误中学python(4)——最小公约数与辗转相除法

题目 给你两个正整数a和b, 输出它们的最大公约数 辗转相除法 辗转相除法的步骤 def gcd(b,a): b,a=a,b%a if a==0: return b else: return gcd(b,a) 即就是取如果b与a不能整除,就取a和b除以a的余数再考察是个递归的思路. 理解 可以从两个角度去理解辗转相除法 1.举例法 一张长方形纸,长2703厘米,宽1113厘米.要把它截成若干个同样大小的正方形,纸张不能有剩余且正方形的边长要尽可能大.问:这样的正方形的边长是多少厘米? 解答: 可

算法总结之 一行代码求两个数的最大公约数

给定两个不等于0的整数M和N,求M和N的最大公约数 辗转相除法 思路:如果q和r分别是m除以n的商及余数,即m=nq+r, 那么m和n的最大公约数等于n和r的做大公约数!(递归) public class Test9 { public static int gcd(int m, int n){ return n==0 ? m : gcd(n, m%n); } public static void main(String[] args){ int x = gcd(15, 3); System.ou

HDOJ(HDU) 2503 a/b + c/d(最大公约数问题)

Problem Description 给你2个分数,求他们的和,并要求和为最简形式. Input 输入首先包含一个正整数T(T<=1000),表示有T组测试数据,然后是T行数据,每行包含四个正整数a,b,c,d(0 import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc= new Scanner(System.in); int t =sc.nextInt()

求两个整数的最大公约数和最小公倍数

//求最大公约数是用辗转相除法,最小公倍数是根据公式 m,n 的 最大公约数* m,n最小公倍数 = m*n 来计算 #include<stdio.h> //将两个整数升序排列 void ascNum(int *p1,int *p2) { int temp; if(*p1 > *p2) { temp = *p2; *p2 = *p1; *p1 = temp; } } //求两个整数的最大公约数 辗转相除法 int getAppr(int a, int b) { int c; ascNum

辗转相除法(Euclidean Algorithm)极简证明

辗转相除法的目的:求两个树的最大公约数   设两数为a.b(a > b),求它们最大公约数的步骤如下: 设q = a / b,r = a % b, 得a=bq+r(0≤r<b). 1)若r = 0, 则b是a和b的最大公约数. 2)若r≠0,则继续考虑.可以证明:a 和 b 的最大公约数也是 b 和 r 的最大公约数 那么在第二种情况下公约数的关系就有一个递推传递的关系. 就是 a     b   的公约数等于    b      r(a % b)的公约数(a=bq+r)在后者不等于零的情况下

2015华为机试——计算两个正整数的最大公约数和最小公倍数

题目描述: 接口说明 原型: long getMaxDivisor(long lFirstInput, long lSecondInput); 输入参数: int first: 第一个整数; int second: 第二个整数; 返回值: 最大公约数 long getMinMultiple(long lFirstInput, long lSecondInput); 输入参数: int first: 第一个整数; int second: 第二个整数; 返回值: 最小公倍数 解题思路:使用辗转相除法

C语言——求最大公约数及最小公倍数

基本概念 最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数.整数a,b的最小公倍数记为[a,b],同样的,a,b,c的最小公倍数记为[a,b,c],多个整数的最小公倍数也有同样的记号. 最大公约数:也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号. 关于最小公倍数与最大公约数,我们有这样的定理:(a,b)[a,b]=ab(a,b均为整数). 方法分析 最大公

iOS-C_Day5___循环练习

2015.1.23 //循环(计算某个数的位数) 输入一个正整数, 计算这个正整数的位数 //int main(int argc, const char * argv[]) { //    int n; //    int cnt=0; //    scanf("%d", &n); //    while (n) { //        cnt++; //        n/=10; //    } //    printf("cnt = %d\n", cn

c语言--部分循环摘录

1.九九乘法表 #include <stdio.h> int main(int argc,const char *argv[]) { //外层循环--有多少行 for (int i=1; i<=9; i++) { //内层循环--每一行打印的具体条目 for (int j=1; j<=i; j++) { printf("%d*%d=%d ", j, i, i*j); } printf("\n"); } return 0; } 2.字母金字塔

【基础算法】基础算法【转载】

1. 最大公约数 问题:求两个自然数的最大公约数. 分析:这个是基础的数学问题,最大公约数指两个数字公共的约数中最大的,例如数字6的约数有1.2.3.6,数字9的约数有1.3.9,则数字6和数字9的公共约数有1和3,其中3是最大的公约数. 第一种思路:从1开始循环,每次把符合要求(即同时是两个数字的约数)的值都存储起来,那么最后一个存储起来的就是最大的约数. E:\博客-基础算法-代码\1_a_max_divisor.php: [php] view plain copy <?php /** *