辗转相除法 求 两个数的 最大公约数 和 最小公倍数

来源:互联网 发布:亿世界系统源码php 编辑:程序博客网 时间:2024/06/06 14:09

问题描述:
给了m和n两个整数(m和n都大于0),采用辗转相除法,求m和n的最大公约数和最小公倍数。

算法:
定义三个辅助变量,i、j 和 a。
将 m 和 n 中较大的赋值给 i,较小的赋值给 j,令 a = i % j
按照以下步骤循环:
(1)、若 a == 0,则 j 为 m 和 n 的最大公约数。
(2)、若 a !=0,则令 i = j, j = a, a = i % j,退回到第(1)步继续执行。

最小公倍数 = (m * n) / 最大公约数

代码编写:

#include <iostream>using namespace std;void f(int m, int n){    if(m > 0 && n > 0){        int i, j, a;        if(m >= n){            i = m;            j = n;        }else{            i = n;            j = m;        }               a = i % j;          while(a != 0){            i = j;            j = a;            a = i % j;        }        cout<<"最大公约数为:"<<j<<endl;        cout<<"最小公倍数为:"<<(m * n) / j<<endl;    }}int main(){    int m, n;    cout<<"请输入两个整数"<<endl;    cin>>m>>n;    f(m,n);    return 0;}

运行结果:
这里写图片描述

阅读全文
0 0
原创粉丝点击