C语言编程:输入两个正整数,输出其中最大公约数和最小公倍数。

1. 求p和q的最大公约数的欧几里德算法:
(1)输入p和q(p>q)
(2)计算p和q的余数r
(3)r=0时,q即为最大公约数,转第(4)步
否则,令p=q,q=r,继续执行第(2)步
(4)输出q
2. p和q的最小公倍数为p乘以q再除以它们的最大公约数。

如输入:
15,25
则输出:
最大公约数是5
最小公倍数是75

#include<stdio.h>

int main(){

int a,b,num1,num2,temp;

printf("please input two number:\n");

scanf("%d%d",&num1,&num2);

if(num1<num2){

temp = num1;

num1 = num2;

num2 = temp;

}

a = num1;

b = num2;

while(b!=0){   /*利用辗除法,直到b为0为止*/

temp = a%b;

a=b;

b=temp;

}

printf("gongyueshu:%d\n",a);

printf("gongbeishu:%d\n",num1*num2/a);

}

扩展资料:

此题使用的是欧几里德算法,又称辗除法。

只要可计算余数都可用辗转相除法来求最大公因子,包括多项式、复整数及所有欧几里德定义域(Euclidean domain)。

辗转相除法的运算速度为 O(n2),其中 n 为输入数值的位数。

利用辗转相除法方法,可以较快地求出两个自然数的最大公因数,即gcd 或叫做HCF 。

最大公约数(greatest common divisor,简写为gcd;或highest common factor,简写为hcf)

所谓最大公因数,是指几个数的共有的因数之中最大的一个,例如 8 和 12 的最大公因数是 4,记作gcd(8,12)=4。

参考资料:

百度百科-辗除法

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-16

#include&lt;iostream&gt;

using namespace std;

int main()

{

int m,n,k,l,q;

cout&lt;&lt;"请输入m,n的值:";

cin&gt;&gt;m&gt;&gt;n;

if(n&lt;m)

{

k=m;

m=n;

n=k;

}

q=n*m;

while(m!=0)

{

l=n%m;

n=m;

m=l;

}

cout&lt;&lt;"最大公约数为:"&lt;&lt;n&lt;&lt;endl;

cout&lt;&lt;"最小公倍数为:"&lt;&lt;q/n&lt;&lt;endl;

system("pause");

return 0;

}

扩展资料:

#include是个包含命令,就是把iostream.h这个文件里的内容复制到这个地方

ostream.h是input output stream的简写,意思为标准的输入输出流头文件。它包含:

(1)cin&gt;&gt;"要输入的内容"

(2)cout&lt;&lt;"要输出的内容"

这两个输入输出的方法需要#include&lt;iostream.h&gt;来声明头文件。

iostream.h与iostream是不同的。

#include&lt;iostream.h&gt;是在旧的标准C++中使用。在新标准中,用#include&lt;iostream&gt;。iostream的意思是输入输出流。

#include&lt;iostream&gt;是标准的C++头文件,任何符合标准的C++开发环境都有这个头文件。还要注意的是:在VS编程时要添加:

using namespace std;

其原因是:后缀为.h的头文件C++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,C++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。

因此,当使用&lt;iostream.h&gt;时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用&lt;iostream&gt;的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。

本回答被网友采纳
第2个回答  2018-04-22

代码如下:

//有问题可以QQ联系我: 1609299076
#include <stdio.h>

int main() {
    int m, n, p, tmp;
    printf("请输入两个正整数:\n");
    scanf("%d %d", &m, &n);
    p = m * n;
    while (n != 0) {
        tmp = m % n;
        m = n;
        n = tmp;
    }
    printf("最大公约数: %d\n", m);
    printf("最小公倍数: %d\n", p / m);
    return 0;
}

运行截图:

本回答被提问者采纳
相似回答