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;至此求得最小公倍数和最大公约数。

  • 相关阅读:
    hibernate各种状态
    Persistence createEntityManagerFactory方法使用
    JS数组学习笔记
    ES6笔记之参数默认值(译)
    JS是按值传递还是按引用传递?
    linux awk命令详解
    Linux Shell笔记之sed
    类似微信红包随机分配js方法
    ionic tabs隐藏完美解决
    mustache 获取json数据内数组对象指定元素的方法
  • 原文地址:https://www.cnblogs.com/Truedragon/p/12213634.html
Copyright © 2011-2022 走看看