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

    最近开始刷一些简单的C语言题目。做到一道求最大公约数和最小公倍数的题目,有印象自己做过,但发现还是不熟练,所有我决定将心得写下来,供以后复习用。

    首先我想到的一种方法就是直接暴力解决,一个一个试,因为求最大的,所有从大往小试,第一个满足条件的就是最大公约数,代码如下

     1 #include<iostream>
     2 #include<stdio.h>
     3 using namespace std;
     4 int main()
     5 {
     6     int m,n;
     7     int common=1000;
     8     cin>>m;
     9     cin>>n;
    10     while(1)
    11 {
    12     
    13     if(m%common==0&&n%common==0)
    14     {
    15         cout<<common;
    16         break;
    17     }
    18     
    19     else{
    20         common--;
    21     }
    22     
    23 }    return 0;
    24 }

    当然,这其实是一个最直接最好理解的方法,但当数字越来越大时,它的效率明显是不高的。

    这里就有了第二种方法“辗转相除法”:

      这种方法也很好理解,首先我们取两个数,一个max一个min,分别代表两个数中较大的和较小的哪一个。

      第一步:用max%min得到一个结果,我们取一个变量temp来存储它。于是temp=max%min;

      第二步:将min的值赋给max,将temp的值赋给min,继续以上步骤知道temp=0;那么上一轮的temp即为最大公约数(即本轮的max)

     1 #include <iostream> 
     2 using namespace std;
     3 int main()
     4 {
     5     int temp=1,max,min;
     6     cin>>max;
     7     cin>>min;
     8     while(temp)
     9     {
    10         temp=max%min;
    11         max=min;
    12         min=temp;
    13     }
    14     cout<<max;
    15     return 0;
    16 }

    在得到最大公约数后最小公倍数就显得很简答了,它等于(max*min)/temp;至此求得最小公倍数和最大公约数。

  • 相关阅读:
    MDA模型定义及扩展
    java中 i = i++和 j = i++ 的区别
    nginx+tomcat负载均衡和session复制
    HDU 4010.Query on The Trees 解题报告
    codeforces 165D.Beard Graph 解题报告
    zoj 3209.Treasure Map(DLX精确覆盖)
    hdu 1155 Bungee Jumping
    选择Nginx的理由
    九九乘法表
    K
  • 原文地址:https://www.cnblogs.com/Truedragon/p/12213634.html
Copyright © 2011-2022 走看看