输入两个正整数m和n,求它们的最大公约数和最小公倍数(本题要求用辗转相除法实现)

作者&投稿:秋义 (若有异议请与网页底部的电邮联系)
C++实现输入两个正整数m和n,求其最大公约数和最小公倍数?~

#include "stdio.h"
void main()
{
int m,n,i,c;
printf("请输入两个正整数
");
scanf("%d %d",&m,&n);
c = m < n ? m : n ; // 取m n 中较小的数,赋值给c //
for(i = 2 ; i <= c ; i++)
{
if( m % i == 0 && n % i == 0)
{
printf("m 与 n 的最大公约数为%d,",i);
break;
}
}
if(i == c+1)
printf("没有最大公约数 ");
c = m > n ? m : n ; // 取 m n 中较大的数,赋值给c //
for (i = c ; i <= m*n; i++)
{
if ( i % m ==0 && i % n ==0)
{
printf("最小公倍数为%d.
",i);
break;
}
}
}

扩展资料:总结
1)两个数求最大公约数,分别把两个数除以i取余数等于0,这是i就是这个两个数的
最大公约数,i从2开始递增到mn中较小的那个数。若递增到mn中较小的数,仍除不出来。
则没有最小公倍数。
2求两个数最小公倍数,把mn中较小的数赋值给i。i自增到m*n(因为必定存在一个公倍数为m*n)
若mn都满足除i取余数都等于0说明,i是mn的倍数。输入出mn程序结束。

#include
int main(){
int a,b,num1,num2,temp;
printf("please input two number:
");
scanf("%d%d",&num1,&num2);
if(num1<num2){
temp = num1;
num1 = num2;
num2 = temp;
}
a = num1;
b = num2;
while(b!=0){
temp = a%b;
a=b;
b=temp;
}
printf("gongyueshu:%d
",a);
printf("gongbeishu:%d
",num1*num2/a);
}

扩展资料:
两个整数的最大公约数主要有两种寻找方法:
* 两数各分解质因数,然后取出同样有的质因数乘起来
*辗转相除法(扩展版)
和最小公倍数(lcm)的关系:
gcd(a, b) * lcm(a, b) = ab
a与b有最大公约数,
两个整数的最大公因子可用于计算两数的最小公倍数,或分数化简成最简分数。
两个整数的最大公因子和最小公倍数中存在分配律:
* gcd(a, lcm(b, c)) = lcm(gcd(a, b), gcd(a, c))
* lcm(a, gcd(b, c)) = gcd(lcm(a, b), lcm(a, c))
在坐标里,将点(0, 0)和(a, b)连起来,通过整数坐标的点的数目(除了(0, 0)一点之外)就是gcd(a, b)。

输入两个正整数m和n, 求其最大公约数和最小公倍数.

<1> 用辗转相除法求最大公约数
算法描述:
m对n求余为a, 若a不等于0
则 m <- n, n <- a, 继续求余
否则 n 为最大公约数
<2> 最小公倍数 = 两个数的积 / 最大公约数

#include
int main()
{
int m, n;
int m_cup, n_cup, res; /*被除数, 除数, 余数*/
printf("Enter two integer:\n");
scanf("%d %d", &m, &n);
if (m > 0 && n >0)
{
m_cup = m;
n_cup = n;
res = m_cup % n_cup;
while (res != 0)
{
m_cup = n_cup;
n_cup = res;
res = m_cup % n_cup;
}
printf("Greatest common divisor: %d\n", n_cup);
printf("Lease common multiple : %d\n", m * n / n_cup);
}
else printf("Error!\n");
return 0;
}

★ 关于辗转相除法, 搜了一下, 在我国古代的《九章算术》中就有记载,现摘录如下:

约分术曰:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”

其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法,实际上就是辗转相除法。

辗转相除法求最大公约数,是一种比较好的方法,比较快。

对于52317和75569两个数,你能迅速地求出它们的最大公约数吗?一般来说你会找一找公共的使因子,这题可麻烦了,不好找,质因子大。

现在教你用辗转相除法来求最大公约数。

先用较大的75569除以52317,得商1,余数23252,再以52317除以23252,得商2,余数是5813,再用23252做被除数,5813做除数,正好除尽得商数4。这样5813就是75569和52317的最大公约数。你要是用分解使因数的办法,肯定找不到。

那么,这辗转相除法为什么能得到最大公约数呢?下面我就给大伙谈谈。

比如说有要求a、b两个整数的最大公约数,a>b,那么我们先用a除以b,得到商8,余数r1:a÷b=q1…r1我们当然也可以把上面这个式子改写成乘法式:a=bq1+r1------l)

如果r1=0,那么b就是a、b的最大公约数3。要是r1≠0,就继续除,用b除以r1,我们也可以有和上面一样的式子:

b=r1q2+r2-------2)

如果余数r2=0,那么r1就是所求的最大公约数3。为什么呢?因为如果2)式变成了b=r1q2,那么b1r1的公约数就一定是a1b的公约数。这是因为一个数能同时除尽b和r1,那么由l)式,就一定能整除a,从而也是a1b的公约数。

反过来,如果一个数d,能同时整除a1b,那么由1)式,也一定能整除r1,从而也有d是b1r1的公约数。

这样,a和b的公约数与b和r1的公约数完全一样,那么这两对的最大公约数也一定相同。那b1r1的最大公约数,在r1=0时,不就是r1吗?所以a和b的最大公约数也是r1了。

有人会说,那r2不等于0怎么办?那当然是继续往下做,用r1除以r2,……直到余数为零为止。

在这种方法里,先做除数的,后一步就成了被除数,这就是辗转相除法名字的来历吧。



刚出炉的新鲜热乎的答案
VC6.0 验证通过

#include<stdio.h>
main()
{
int m,n,a,b,t,temp,h;
printf("输入m和n\n");
scanf("%d%d",&m,&n);
a=m;
b=n;
if(a<b)
{
t=a;
a=b;
b=t;
}
while(b!=0) //求最大公约数
{
temp=a%b;
a=b;
b=temp;
}
h=m*n/a;//求最小公倍数
printf("%d和%d的最大公约数是:%d\n",m,n,a);
printf("%d和%d的最小公倍数是:%d\n",m,n,h);
}


.输入两个正整数m和n,求其最大公约数和最小公倍数。
if(n<m)\/\/把大数放在n中,把小数放在m中.{temp=n;n=m;m=temp;} p=n*m;\/\/P是原来两个数n,m的乘积.while(m!=0)\/\/求两个数n,m的最大公约数.{ r=n%m;n=m;m=r;} printf("Its MAXGongYueShu:%d\\n",n);\/\/打印最大公约数.printf("Its MINGongBeiShu:%d\\n",p\/n);打印最...

输入2 个正整数m和n(1<=m,n<=500),统计并输出m 和n之间的素数的个数...
include <stdio.h>int IsPrime(int i){ int j=0; for(j=2;j<i;j++){ if(0==(i%j)){ return 0; } }return 1;}void main(){int m,n,i;scanf("%d %d",&m,&n);for(i=m+1;i<n;i++)if(IsPrime(i)==1)printf("%d ",i);} include <stdio.h>int...

C语言函数 【问题描述】输入2个正整数m和n(m>1,n<=500),统计并输出m...
r=1; for ( i=2;i<=m\/2;i++ ) if ( m%i==0 ) {r=0;break;} return r;}void main() { int m,n,i,k,s; scanf("%d,%d",&m,&n); k=s=0; for ( i=m;i<=n;i++ ) if ( prime(i) ) { k++; s+=i; } printf("count=%d,sum=%d\\n",k,s);} ...

输入两个正整数n和m(m<10),将其转换为m进制后输出。要求定义并调用函数...
Dectoo 函数参数1,是要转换的十进制数,参数二是 进制,小于10,参数三是 整型指针,指向 转换后的数存放的数组, 参数四是整型指针,返回转换后的数码位数。include <stdio.h> void Dectoo(int x, int base, int *r ,int *k){ int n=0,i,t;while (x>=1){ r[n]=x%base;x=x\/...

编写程序,输入两个正整数m和n,输出m和n之间的素数并统计素数的个数...
2、在窗体上添加控件:lable控件,text值为“输入一个数,判断是否是素数”;一个textbox控件(tb_inputvalue),用来输入要判断的素数。3、素数设计算法。4、素数设计算法:取消检测区间,提高程序效率。我们可以只判断2到n\/2之间的数,就可以知道他是不是素数了。5、获取前100之间的所有素数:从2到...

输入两个正整数m和n,求其最大公约数和最小公倍数c语言
include<stdio.h> main(){ int m,n,a,b,t,temp,h;printf("输入m和n\\n");scanf("%d%d",&m,&n);a=m;b=n;if(a

C语言编程:输入两个正整数m和n,求它们的最大公约数。
include <stdio.h> int gcd(int a,int b){ if(a%b)return gcd(b,a%b);return b;} int main(){ int m,n;scanf("%d%d",&m,&n);printf("%d\\n",gcd(m,n));return 0;}

.输入两个正整数m和n,求其最大公约数和最小公倍数
最大公因数n和最小公倍数mn

输入两个正整数m和n,求最大公约数和最小公倍数
这个程序采用的是辗转相除法。规则为:1) n 和 m (n>m) 的最大公约数等于 m 和 n%m 的最大公约数。2) 当 m为0 时,这时的 n 为 开始时的 n 和 m 的最大公约数

输入两个正整数N和M,求最大公约数和最小公倍数?高手帮忙呀!用C语言...
分析:求最大公约数的算法思想:(最小公倍数=两个整数之积\/最大公约数) (1) 对于已知两数m,n,使得m>n; (2) m除以n得余数r; (3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4); (4) m←n,n←r,再重复执行(2)。 例如: 求 m=14 ,n=6 的最大公约数....

南木林县18744222968: 输入两个正整数m和n,求它们的最大公约数和最小公倍数.(习题6.1) -
戈泰白奇:[答案] 输入两个正整数m和n,求其最大公约数和最小公倍数.用辗转相除法求最大公约数 算法描述:m对n求余为a,若a不等于0 则 m 0) { m_cup = m; n_cup = n; res = m_cup % n_cup; while (res != 0) { m_cup = n_cup; n_cup = re...

南木林县18744222968: 在主函数中由键盘输入两个正整数m和n,写两个函数分别求取它们的最大公约数和最小公倍数,在主 -
戈泰白奇:[答案] input int m,n; int p=m,q=n,t; while(t!=0) { t=p%q; p=q; q=t; } int MaxGys=p; int MinGbs=m*m/p;

南木林县18744222968: C语言编程:输入两个正整数m和n,求它们的最大公约数
戈泰白奇: main() { int a,b,num1,num2,temp; printf("请输入两个正整数:\n"); scanf("%d,%d",&num1,&num2); if(num1

南木林县18744222968: C语言程序设计问题:输入两个正整数m和n,求其最大公约数哥最小公倍数(最好简单一点的) -
戈泰白奇: //希望我的回答对你的学习有帮助#include int main(){ int p,r,n,m,temp; printf("请输入两个正整数n,m:"); scanf("%d%d",&n,&m); if (n temp=n; n=m; m=temp; } p=n*m; while(m!=0){ r=n%m; n=m; m=r; } printf("它们的最大公约数为:%d\n",n); printf("们的最小公约数为:%d\n",p/n); return 0; }

南木林县18744222968: 题目:输入两个正整数m和n,求其最大公约数和最小公倍数. (java)1.程序分析:利用辗除法请问,什么是辗除法? -
戈泰白奇:[答案] 设两数为a、b(b
南木林县18744222968: C语言编程:输入两个正整数m和n,求其最大公约数和最小公倍数,急!急! -
戈泰白奇: #include int main() { int m, n; int m_cup, n_cup, res; /*被除数, 除数, 余数*/ printf("Enter two integer:\n"); scanf("%d %d", &m, &n); if (m > 0 && n >0) { m_cup = m; n_cup = n; res = m_cup % n_cup; while (res != 0) { m_cup = n_cup; n_cup = ...

南木林县18744222968: C语言 输入两个正整数m和n,求他们的最大公约数和最小公倍数.
戈泰白奇: #include<stdio.h> #include<math.h> int main(void) { int n,m,i,j,t; scanf("%d%d",&n,&m); i = m > n ? m : n; j = m > n ? n : m; while(j) { t = i%j; i = j; j = t; } printf("\n%d--%d",i,m*n/i); return 0; } 请采纳,谢谢!

南木林县18744222968: 编写一个函数,对于两个正整数m和n,求其最大公约数fum -
戈泰白奇:[答案] //用辗转相除法球最大公约数int fum(int m,int n) //fum求m和n的最大公约数{ int tmp,r; if(mn&n...

南木林县18744222968: C语言从键盘输入两个正整数m和n,求最大公约数和最小公倍数 -
戈泰白奇: #include <stdio.h>void main() { int m,n,r,x; scanf("%d,%d",&m,&n); x=m*n; while(n!=0) { r=m%n; m=n; n=r; } printf("%d %d\n",m,x/m); }

南木林县18744222968: 由键盘输入两个正整数m、n(m、n用长整数表示),计算它们的最大公约数.#include"stdio.h"main(){\x05long m,n,c;\x05scanf("%d%d",&m,&n);L1:if(m==n)... -
戈泰白奇:[答案] #include //辗除法 int gcd(int a,int b) { \x05int c,d; \x05if (a

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网