c语言求最大公约数和最小公倍数应该怎么做
最大公因数;也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个
材料/工具
电脑,C语言
方法
辗转相减法:即尼考曼彻斯法,其特色是做一系列减法,从而求得最大公约数。辗转相减法即通过对两数的不断减法运算。假设两数为 x, y。
当 x > y 时,令 x = x - y;
反之,则令 y = y - x;
之后一直辗转相减,直至 x = y 时,终止。
代码如下:
穷举法又称枚举法,通过对数值范围内的所有数字进行检验,得出其结果。
代码如下:
例如求27和15的最大公约数过程为:27÷15 余1215÷12余312÷3余0因此,3即为最大公约数#include<stdio.h>void main() /*辗转相除法求最大公约数 */ {int m, n, a, b, t, c; printf("Input two integer numbers:n"); scanf("%d%d", &a, &b); m=a; n=b; while(b!=0)/* 余数不为0,继续相除,直到余数为0 */{ c=a%b; a=b;b=c;} printf("The largest common divisor:%dn", a); printf("The least common multiple:%dn", m*n/a);}
printf("Input two integer numbers:n");
scanf("%d%d", &a, &b);
m=a; n=b;
while(b!=0)/* 余数不为0,继续相除,直到余数为0 */
{ c=a%b; a=b;b=c;}
printf("The largest common divisor:%dn", a);
printf("The least common multiple:%dn", m*n/a);
}
扩展阅读,以下内容您可能还感兴趣。
c语言编程求最大公约数和最小公倍数
#include<stdio.h>
int main()
{
百int m,n;
int divisor,dividend,res;/*除数 被除数 余数*/
scanf("%d%d",&m,&n);
if(m>0&&n>0)
{
if(m>=n)
{
度divisor=n;
dividend=m;
}
else
{
divisor=m;
dividend=n;
}
res=dividend%divisor;
while(res!=0)//循环体是三条语句,不加大括号循环只执行一条版语句
{
dividend=divisor;
divisor=res;
res=dividend%divisor;
}
printf("%d",divisor);
}
else
printf("error!\n");
return 0;
}
两数相权乘除以最大公约数就是最小公倍数追问辗转相除法要求较小的数除较大的数 但是用 c++取余运算时 为什么就可以不用比较大小,把if(m>=n)
{
divisor=n;
dividend=m;
}
else
{
divisor=m;
dividend=n;
}
删去也可以算出正确结果追答因为比较小的数对比较大的数取余,余数就是比较小的数,比如6%12,余数为6,余数不为0,此时算术变成12对6取余,可以看到就算不判断两个数的大小,程序通过余数交换最终也会变成大的数对小的数取余,不判断大小会造成程序碰到小的数在前面会多运行一次取余运算,运行效率降低,因此一般都会进行判断
c语言求最大公约数和最小公倍数
#include <stdio.h>
int divmax(int m,int n)
{
int r;
while (n!=0)
{
r=m%n;//////////////////1
m=n;
n=r;////////////////////2
}
return m;////////////////3
}
int mulmin(int m, int n)////////////4
{
int p;
p=m*n;
return (p/divmax(m,n));///////////5
}
int main()
{
int m,n,t;
printf("请输入制两个正百整数m,n:");
scanf("%d,%d",&m,&n);
if (m<n)
{
t=m;////////////////////////////6
m=n;////////////////////////////7
n=t;////////////////////////////8
}
printf("它们度的最大问公约数为:答%dn",divmax(m,n));
printf("它们的最小公倍数为:%dn",mulmin(m, n));//////////9
}
C语言程序改错——求最大公约数和最小公倍数
最大公约数可以是zhidao1。
#include&版nbsp;<stdio.h>int main(void)
{
int a,b;
int min,max;
int i,s;
scanf("%d %d",&a,&b);
min=a<b?a:b;
max=a>b?a:b;
for(i=min;i>1;i--)//i>1改为i>=1
if((min%i==0)&&(max%i==0))
break;
if(i=1)//此行删权除
printf("no answer");//此行删除
s=max;
for(s=max;;s++)
if((s%min==0)&&(s%max==0))
break;
printf("%d %d",i,s);
return 0;
}
程序设计问题:C语言求最大公约数和最小公倍数 要求用三种方法!
#include<stdio.h>main(){ int p,r,n,m,temp; printf("please input the data:\n"); scanf("%百d%d",&n&m); if(n<m){ 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);} 这是我原来做的知程序。。印象中就是会这个。你先用着!其他的道我不会了~
c语言输入两个整数求最大公约数和最小公倍数
#include <stdio.h>
void main()
{
复int m,n,k=0,t,a,b;//k要初始化一下
printf("请输入两个正整数:");
scanf("%d%d",&m,&n);
a=m;
b=n;//用a和b保存输入的两个数,因为后面还要用到
if(m<n)
{
制t=m;
m=n;
n=t;
}//这里应该是如果m<n就把m和n交换,不是知你那么写的
while(k!=0)
{
k=m%n;
m=n;
n=k;
}
printf("最大公约数:%dn",m);
printf("最小公倍数:%dn",a*b/m);//你m和n值已经变了,所道以要用ab
}