• 欧几里得算法


    欧几里得辗转相除法,有效地处理求两个数的最大公约数问题!

    下面是代码和实现!

     1 #include<stdio.h>
     2 int gcd(int m,int n)
     3 {
     4     if(m<n)
     5     gcd(n,m);
     6     int r;
     7     do{
     8         r=m%n;
     9         m=n;
    10         n=r;    
    11                      }while(r);//当余数不为0时,让m=n,n=r直至余数为0,此时的m就是最大公约数!
    12     return m;
    13 }
    14 int main()
    15 {
    16     int a,b;
    17     while(scanf("%d%d",&a,&b))
    18     printf("%d
    ",gcd(a,b));
    19     return 0;
    20 }

    下面是用递归的方法写的:

     1 #include<stdio.h>
     2 int gcd(int m,int n)
     3 {
     4     if(m<n)
     5     gcd(n,m);
     6     if(n==0)
     7     return m;
     8     else
     9     return gcd(n,m%n);
    10 }
    11 int main() 
    12 {
    13     int a,b;
    14     while(scanf("%d%d",&a,&b)!=EOF)
    15     {
    16         printf("%d
    ",gcd(a,b));
    17     }
    18     return 0;
    19 }
  • 相关阅读:
    [HNOI2008] Cards
    loj #136
    a problem
    dp * 3
    STL
    套题1
    luogu 4211
    loj #2319
    loj #2316
    luogu 1144
  • 原文地址:https://www.cnblogs.com/Eric-keke/p/4673641.html
Copyright © 2020-2023  润新知