zoukankan      html  css  js  c++  java
  • 最大公约数和最小公倍数算法实现

    最大公约数

    1. 用最基本的循环遍历的方法

    2. 用辗转相除法

    3. 用辗转相减法

    See also:  http://baike.baidu.com/view/47637.htm

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int CommonDivisor( int x, int y);
     5 int CommonMultiple(int x, int y);
     6 int CommonDivisor1( int x, int y);
     7 int CommonMultiple2(int x, int y);
     8 int CommonDivisor2(int x, int y);
     9 int getDif(int x, int y);
    10 int main()
    11 {
    12     int a, b;
    13     cout << "Please input two integer: ";
    14     cin>>a >>b;
    15 
    16     cout<<CommonDivisor(a,b)<< endl;
    17     cout<<CommonMultiple(a,b)<< endl;
    18     cout<<"-----------------------------------"<< endl;
    19     cout<<CommonDivisor1(a,b)<< endl;
    20     cout<<CommonMultiple2(a,b)<< endl;
    21 
    22     cout<<"-----------------------------------"<< endl;
    23     cout<<CommonDivisor2(a,b)<< endl;
    24 
    25     cout<<endl;
    26 
    27 }
    28 
    29 int CommonDivisor1( int x, int y)
    30 {
    31     //最大公约数一定在1和X和Y较小的值之间,因此从x和y之间较小的值开始循环遍历,找到最大的公约数
    32     int start = x;
    33     if(x > y)
    34         start = y;
    35     for (int i = start; i >=1; i--)
    36     {
    37         if(x % i ==0 && y % i == 0)
    38             return i;
    39     }
    40     return 1;
    41 }
    42 
    43 int CommonDivisor2(int x, int y)
    44 {
    45     //辗转相减法
    46     if(x % 2 ==0 && y % 2 == 0)
    47         return 2 * CommonDivisor2(x / 2, y / 2);
    48     else
    49     {
    50         return getDif(x,y);
    51     }
    52 }
    53 
    54 int getDif(int x,int y)
    55 {
    56     int larger = x;
    57     int smaller = y;
    58     if(x < y)
    59     {
    60         larger = y;
    61         smaller = x;
    62     }
    63     int dif =  larger - smaller;
    64     if(dif == smaller )
    65         return dif;
    66     else
    67         return getDif(smaller, dif);
    68 }
    69 
    70 int CommonDivisor( int x, int y)
    71 {
    72     //辗转相除法
    73     if(x== 0)
    74         return y;
    75     return CommonDivisor(y %x , x);
    76 }
    77 int CommonMultiple(int x, int y)
    78 {
    79     //最小公倍数是x和y的乘积 再除以x和y的最大公约数 所的出来的值
    80     int cd = CommonDivisor(x,y);
    81     return ((x * y ) / cd);
    82 }
    83 int CommonMultiple2(int x, int y)
    84 {
    85     //最小公倍数是的值一定在x和y中较大者和xy乘积之间,所以从小到大遍历找到这个数字
    86     int start = x;
    87     int end = x * y;
    88     if(x < y)
    89         start = y;
    90     for(int i = y ; y <= end; i++)
    91     {
    92         if(i % x ==0 && i % y == 0)
    93             return i;
    94     }
    95     return end;
    96 }
  • 相关阅读:
    WCF如何通过契约加编码方式调用
    编码为multipart/form-data自定义类型(包括文件)如何自动绑定到webapi的action的参数里
    MSMQ消息队列
    使用windows服务和MSMQ和进行日志管理(解决高并发问题)
    二叉树的三种遍历方式
    go语言的3个包——strconv、os.Args、flag
    公钥、私钥、签名、数字证书的关系
    go语言实现单链表
    Go语言学习笔记(10)——错误处理示例
    go语言实现链式栈
  • 原文地址:https://www.cnblogs.com/anthonyBlog/p/4110532.html
Copyright © 2011-2022 走看看