• 两个数的最大公因数


    1.问题描述
    给出两个正整数,求他们的最大公约数
    2.问题分析
    算法1:连续整数检验法(穷举法)
    d=min{m,n}
    如果m与n能同时整除d,则d是两个数的最大公约数。
    否则,若任一条件不成立,d=d-1,直到能同时整除。
     
    eg:12与9,将9赋给d,12不能整除9,则d-1为8.
    12与9均不能整除8,d=d-1.
    直到d=3,12与9都能整除3,则3为12与9的最大公因数。
    #include<stdio.h>
    int  f(int m,int n){
        int d;
        if(m<n)
        d=m;
        else 
        d=n;
        while(d>0)
        {
            if(m%d==0&&n%d==0)
            return d;
            d--;
        }
    
    
    }
     
    int main()
    {
        int m,n;
        printf("请输入两个正整数:"); 
        scanf("%d %d",&m,&n);
        printf("这两个数的最大公约数为:%d ",f(m,n));
         
    }


    算法2:欧几里得算法
    1.d=m%n;
    2.循环直到r=0;
       d=m%n;
       m=n;
       n=d;
    3.返回m.
     
    eg:d为m与n的模。
    d=12%9=3;
    m=n=9;
    n=d=3;
    继续循环;
    d=9%3=0;
    m=n=3;
    n=d=0;
    跳出循环。返回m值,为最大公因数。
     
    #include<stdio.h>
    int f(int m,int n)
    {
        int d;
        while(d!=0)
        {
            d=m%n;
            m=n;
            n=d;
        
        }
        return m;
    }
    int main()
    {
        int m,n;
        printf("请输入两个正整数:"); 
        scanf("%d %d",&m,&n);
        printf("这两个数的最大公约数为:%d ",f(m,n));
         
    }



    算法3:连续相减法
    输入两个正整数a,b
    如果a>b,a=a-b;
    否则b=b-a;
    直到a=b输出a或者b;
     
    eg:a=12,b=9,a=12-9=3;
    b>a,b=b-a=9-3=6;
    b=b-a=6-3=3;
    b=a,跳出循环,所以a或b为最大公因数。
    #include<stdio.h>
    #include<math.h> 
    int f(int m,int n)
    {
        m=abs(m);    //abs绝对值函数,需要导入<math.h>包 
        n=abs(n);    //用绝对值防止万一出现负数的情况 
        while(m!=n){
        if(m>n)
        m=m-n;
        else 
        n=n-m;
    }
    return m;
    
    }
    int main()
    {
        int m,n;
        printf("请输入两个正整数:"); 
        scanf("%d %d",&m,&n);
        printf("这两个数的最大公约数为:%d ",f(m,n));
         
    }


       
     
     
     
  • 相关阅读:
    Typecho
    iOS开发
    搭建自己的Git服务器
    Markdown
    微信使用篇
    bzoj2406 矩阵
    POI2010 Bridges
    上下界网络流总结
    TopCoder SRM 582 Div 1
    port命令记录
  • 原文地址:https://www.cnblogs.com/laurarararararara/p/10886455.html
Copyright © 2020-2023  润新知