zoukankan      html  css  js  c++  java
  • 求最大公约数和最小公倍数的几种方法

    最大公约数

    1. 常规方法
    2. 辗转相除法
    3. 递归法
    4. 三目运算符 + 递归

    最小公倍数

    1. 常规方法
    2. 利用最大公约数求解

    示例代码:

     1 #include<iostream>
     2 using namespace std;
     3 
     4 //最大公约数 
     5 //(1)常规方法 
     6 void gcd1(int a, int b)
     7 {
     8     int minNum = min(a, b);    
     9     for (int i = minNum; i >= 1; i--)
    10     {
    11         if (a % i == 0 && b % i == 0)
    12         {
    13             printf("%d
    ", i);
    14             break;
    15         }
    16     }
    17 }
    18 
    19 //(2)辗转相除法 
    20 void gcd2(int a, int b)
    21 {
    22     int tmp;
    23     while (true) {
    24         if (a == 0) 
    25         {
    26             printf("%d
    ", b);
    27             break;
    28         }
    29         
    30         tmp = a;
    31         a = b % a;
    32         b = tmp;
    33     }    
    34 }
    35 
    36 //(3)递归法 
    37 int gcd3(int a, int b)
    38 {
    39     if (b == 0)
    40         return a;
    41     else
    42         return gcd3(b, a % b);
    43 }
    44 
    45 //(4)三目运算符 + 递归 
    46 int gcd4(int a, int b)
    47 {
    48     return (b == 0) ? a : gcd4(b, a % b);
    49 }
    50 
    51 //最小公倍数
    52 //(1)常规方法 
    53 int lcm1(int a, int b)
    54 {
    55     int maxNum = max(a , b);
    56     int pro = a * b;
    57     for(int i = maxNum; i <= pro; i++)
    58     {
    59         if( i % a == 0 && i % b == 0)
    60         {
    61             printf("%d
    ", i);
    62             break;
    63         }
    64     }
    65 }
    66 
    67 //(2)利用最大公约数求解 
    68 int lcm2(int a, int b)
    69 {
    70     return a * b / gcd4(a , b); 
    71 }
    72 
    73 int main()
    74 {
    75     int a = 15, b = 12;
    76     printf("15 和 12 的最大公约数为:
    ");
    77     gcd1(a, b);
    78     
    79     gcd2(a, b);
    80     
    81     int t = gcd3(a, b);
    82     printf("%d
    ", t);
    83     
    84     t = gcd4(a, b);
    85     printf("%d
    ", t);
    86     
    87     printf("15 和 12 的最小公倍数为:
    ");
    88     lcm1(a, b);
    89     
    90     t = lcm2(a ,b);
    91     printf("%d", t);     
    92     
    93     return 0;
    94 }

    运行结果:

  • 相关阅读:
    拓扑排序问题
    向陈越姥姥哭诉----关键活动
    最小生成树之Prim算法和Kruskal算法
    1212. Team Scores in Football Tournament
    1205. 每月交易II
    1098. 小众书籍
    1204. Last Person to Fit in the Elevator
    579. 查询员工的累计薪水
    1127. User Purchase Platform
    1225. 报告系统状态的连续日期
  • 原文地址:https://www.cnblogs.com/cao-lei/p/7225633.html
Copyright © 2011-2022 走看看