zoukankan      html  css  js  c++  java
  • c语言求两个数的最大公因数(穷举法,欧几里得算法,递归)

    /*主函数Gcd为求公因数的函数输入为负时返回-1*/

    int main()
    {
      int a, b;
      printf("Input a,b:");
      scanf("%d,%d",&a,&b);
      if (a < 0 || b < 0)
       printf("Input number should be positive! ");
      else
       printf("Greatest Common Divisor of %d and %d is %d ",a,b,Gcd(a,b));
      return 0;
    }

    /*穷举法一(欧几里得)*/

    int Gcd(int a,int b)

    {

      int i,t;

      if(a<=0 || b<=0)  

      return -1;

      t=a<b ? a : b;

      for(i=t;i>0;i--)

      {

        if(a%i==0 && b%i==0)return i;

      }

      return 1;

    }

    /*穷举法二*/

    int Gcd(int a,int b)

    {

      int r;

      if(a<=0 || b<=0)

      return -1;

      do

      {

        r=a%b;

        a=b;

        b=r;

      }while(r!=0);

      return a;

    }

    /*递归一*/

    int Gcd(int a,int b)

    {

      if(a<=0 || b<=0)

        return -1;

      if(a%b==0)

        return b;

      else

        return Gcd(b,a%b);

    }

    /*递归二是根据公因数的如下性质:
    根据最大公约数的如下3条性质,采用递归法编写计算最大公约数的函数Gcd(),
    在主函数中调用该函数计算并输出从键盘任意输入的两正整数的最大公约数。
    性质1  如果a>b,则a和b与a-b和b的最大公约数相同,即Gcd(a, b) = Gcd(a-b, b)
    性质2  如果b>a,则a和b与a和b-a的最大公约数相同,即Gcd(a, b) = Gcd(a, b-a)
    性质3  如果a=b,则a和b的最大公约数与a值和b值相同,即Gcd(a, b) = a = b

    */

    /*非递归*/

    int Gcd(int a, int b)

      if (a <= 0 || b <= 0)
        return -1;
      while (a != b)
      { 
        if (a > b)
           a = a - b;
        else if (b > a)
           b = b - a;
      }
     return a;
    }

    /*递归*/

    int Gcd(int a,int b)

    {

      if(a<=0 || b<=0)

        return 0;

      if(a==b)

        return a;

      else if(a>b)

        return Gcd(a-b,b);

      else

        return Gcd(a,b-a);

    }

  • 相关阅读:
    Linux常用快捷键
    如何Oracle 数据库备份与恢复
    Linux常用命令解释
    转摘:商业智能BI的演绎型需求和归纳型需求BI三维框架之内容维研究
    PHP中const的使用
    PHP中define的使用
    Apache配置正向代理与反向代理
    正向代理
    JAVA System.getProperty()参数
    PHP查找当前URL文件扩展名
  • 原文地址:https://www.cnblogs.com/didiaoxiaoguai/p/6703465.html
Copyright © 2011-2022 走看看