求m和n的最大公约数简单算法问题

#include<stdio.h>
#include<math.h>
main()
{int m,n,r,a,b,c,s;
scanf("%d,%d",&m,&n);
a=m;
b=n;
if(m<n)
{c=m;m=n;n=c;}

while(r!=0)
{r=m%n;
m=n;
n=r;}
s=a*b/n;
printf("n=%d,s=%d",n,s);
return 0;
}
哪里错了?

这个算法的名字叫做“辗转相除法”。
它是基于下面的性质:
1)若m是n的整数倍,则m和n的最大公约数就是n。
2)否则,若m除以n的余数是r(r<>0),则m和n的最大公约数就是n和r的最大公约数。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-19
r没有赋值,然后while(r!=0)中使用了未赋值的r,应该是会报错的追问

可是显示错误和警告为0

追答

记不太清了,很久没用C了,如果我没记错的话,主函数main()是不能写return,只有有返回值的函数之类的才需要return,去掉return 0;试试

追问

试过了,不行

追答

那你倒是告诉我报什么错啊,我这没开发工具,不好调试

追问

没报错,就是无法运行

追答

不知道为什么运行不起来,但是我发现了一个错,你用是while循环,每次都将R赋值给了n,辗转相除最后算出来r是为0的,你将0赋值给了n,如后才转到while后边的判断条件,跳出了while循环,而你计算最大公约数是用s=a*b/n除数为0了,应该是s=a*b/m吧

本回答被提问者采纳
第2个回答  2013-07-20
辗转相除后,n就是最大公约数,你求的s没什么意义追问

s是最小公倍数

追答

while(r!=0)

r没有初始化,这个循环进步来
要初始化 r=m

求两个整数m和n的最大公约数
1、辗转相减法:辗转相减法是古希腊数学家欧几里得提出的一种求最大公约数的方法。具体操作如下:首先比较m和n的大小,将较大的赋给a,较小的赋给b;计算a与b的差,将其赋给t;如果t等于0,则b就是最大公约数;如果t不等于0,则用(a,t)代替原来的(a,b),然后重复2~4步,直到t等于0。辗...

求m和n的最大公约数,算法问题
1)若m是n的整数倍,则m和n的最大公约数就是n。2)否则,若m除以n的余数是r(r<>0),则m和n的最大公约数就是n和r的最大公约数。

计算两个自然数m和n的最大公约数。
方法一:分别求出m和n的约数,然后找m,n共有的最大的约数即可。(定义法)方法二:最大公约数*最小公倍数=M*N 方法三:(更相减损)(推荐!!)找m和n中的较大值去和另一个数最差,得到的数再和减数作比较,若二者相等证明该数为最大公约数,若不相等,再用大数减小数,方法同上。直至...

求两个正整数的最大公约数,用算法怎么表示
以下是辗转的算法:分别用m,n,r表示被除数、除数、余数①若m<n,则交换m和n 的值②求m除以n的余数r.③若r=0,则n为最大公约数.,结束。若r≠0,执行第③步.④将n的值放在m中,将r的值放在n中.⑤返回重新执行第②步。更相减损之术求最大公约数的本质是将辗转相除变为辗转相减。假设求两...

求两个正整数m和n的最大公约数
求两个正整数的最大公约数的算法通常使用“辗转相除法”。设有两个正整数m、n,求它们的最大公约数的算法如下:①若m<n,则交换m和n(保证m大于n)。②计算m\/n的余数r。③若r不等于0,则令m=n、n=r,转第②步继续执行;否则,算法结束,n就是最大公约数。下面就是用“辗转相除法'才...

求两个数m和n的最大公约数?用程序框图怎么画?
假设m是大的,n是小的;1、判断m能否被n整除,如果能,则最大公约数就是n。如果不能则进行下一步骤。2、k=m-n。比较n和k,假设n大,k小。m=n; n=k; 重复第1步骤。直到m能被n整除为止。编程:int big_divisor(int m, int n){int min,max,k=m;do{max=MAX(k,n);min=MIN(k,n...

求两个正整数的最大公约数,用算法怎么表示
在“求两个正整数的最大公约数”问题的算法的问题解决中,除了辗转相除求最大公约数和更相减损之术,是否还有其它的算法。辗转相除求最大公约数:假设求两个正整数m和n的最大公约数。以下是辗转的算法:分别用m,n,r表示被除数、除数、余数 ①若m<n,则交换m和n 的值 ②求m除以n的余数r.③...

求两个自然数M和N的最大公约数。
如果M和N是互质数,则M和N的最大公约数是1,如果M和N是倍数关系,则M和N的最大公约数是较小数,如果M和N既不是互质数也不是倍数关系,则用短除法求.

...输入正整数m和n,用穷举法计算m和n的最大公约数和最小公倍数。 谢 ...
给你一个算法和思路:假如m=10,n=100 最大公因数 = 10 最小公倍数 = 100 10 = 2 * 5 100 = 2 * 50 = 2 * 2 * 25 = 2 * 2 * 5 * 5 = 2^2 * 5^2 最大公因数 = 10 = 2 * 5 最小公倍数 = 100 = 2 * 2 * 5 * 5 = 2^2 * 5^2 ...

如何求两个数的最大公约数和最小公倍数
要找到两个数的最大公约数和最小公倍数,可以使用辗转相除法。以下是简化后的步骤:首先,设定两个数为m和n。假设m大于n。定义两个变量min和max。min用于存储最小公倍数,max用于存储最大公约数。输入m和n的值。使用循环,直到余数r等于0为止。在每次循环中,将m赋值为n,将n赋值为r。这是因为...

相似回答