编程求最大公约数和最小公倍数
1. 编程实现输入两个整数,输出其最大公约数和最小公倍数。
举例:输入两个正整数m和n,输出它们的最小公倍数和最大公约数。
代码:
#include <stdio.h>
int main(void)
{
int gcd, lcm, m, n;
int repeat, ri;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++)
{
scanf("%d", &m);
scanf("%d", &n);
if(m <= 0 || n <= 0)
{ printf("m <= 0 or n <= 0");
continue;
}
for(gcd=m; gcd >= 1; gcd--){
if(m % gcd == 0 && n % gcd == 0) break;
}
lcm = m * n / gcd;
printf("%d, %d ",lcm, m, n, gcd, m, n);
}
}
运行效果:
输入输出示例:括号内为说明
输入:
3(repeat=3)
37(m=3,n=7)
244(m=24,n=4)
2418(m=24,n=18)
输出:
21,1.
24,4.
72,6.
(1)编程求最大公约数和最小公倍数扩展阅读:
辗转相除法:
#include <stdio.h>
int main()
{
int m,n;
scanf("%d %d",&a,&b); //输入两个整数
int num1,num2,c; //num1,num2作为计算时的变量,c作为中间变量
if(a>=b) {num1=a; num2=b; }
else {num1=b; num2=a; }//通过比较对num1和num2赋值,便于计算
while(num2>0){
c=num1%num2;
num1=num2;
num2=c;}//辗转相除,num2=0时,num1=最大公因数
printf("最大公因数:%d ",num1);
printf("最小公倍数:%d "m*n/num1);
return 0;
}
2. c语言编程求输入两个数的最大公约数和最小公倍数,怎么做
输入两个正整数m和n,求其最大公约数和最小公倍数.用辗转相除法求最大公约数 算法描述:m对n求余为a,若a不等于0 则 m 0)
{
m_cup = m;
#include<stdio.h>
voidmain()
{
intm,n,m1,n1,t;
printf("请输入两个数(用空格隔开):");
scanf("%d%d",&m,&n);
if(n>m)
{
t=m;
m=n;
n=t;
}
m1=m;
n1=n;
while(n!=0)
{
t=m%n;
m=n;
n=t;
}
printf("%d和%d的最大公约数是:%d
",m1,n1,m);
printf("最小公倍数是:%d
",m1*n1/m);
}
3. 请用C语言编程求两个数的最大公约数和最小公倍数
一楼的回答不对啊,你求的是最小公约数而不是最小公倍数,两个整数的最小公约数永远是1,应该这样改:
main()
{
int
x,y,a,m,n,t;
printf("please
input
two
num
x,y\n");
scanf("%d,%d",&x,&y);
for(a=x<y?x:y;a>0;a--)
if(x%a==0&&y%a==0)
{
printf("x,y的最大公约数是
%d\n",a);
break;
}
m=x/a;
n=y/a;
t=a*m*n;
printf("x,y的最小公倍数是
%d\n",t);
}
4. 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;
}
两数相乘除以最大公约数就是最小公倍数
5. 编程,求最大公约数和最小公倍数
#include <stdio.h>
int main()
{
int a,b,c,m,t;
printf("请输入两个数: ");
scanf("%d%d",&a,&b);
if(a<b)
{
t=a;
a=b;
b=t;
}
m=a*b;
c=a%b;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
printf("最大公约数是: %d ",b);
printf("最小公倍数是: %d ",m/b);
}
(5)编程求最大公约数和最小公倍数扩展阅读
算法思想
利用格式输入语句将输入的两个数分别赋给 a 和 b,然后判断 a 和 b 的关系,如果 a 小于 b,则利用中间变量 t 将其互换。
再利用辗转相除法求出最大公约数,进而求出最小公倍数。最后用格式输出语句将其输出。
#include<stdio.h>是在程序编译之前要处理的内容,称为编译预处理命令。编译预处理命令还有很多,它们都以“#”开头,并且不用分号结尾,所以是c语言的程序语句。
6. 编程求两个整数的最大公约数和最小公倍数
#include<stdio.h>
/*最大公约数*/
intGreatestCommonDivisor(intm,intn)
{
intr;
do
{
r=m%n;
m=n;
n=r;
}while(r!=0);
returnm;
}
/*最小公倍数*/
intLeastCommonMultiple(intm,intn)
{
returnm/GreatestCommonDivisor(m,n)*n;
}
intmain(void)
{
intm,n;
printf("请输入两个数字:");
scanf("%d%d",&m,&n);
printf("最大公约数是%d。 ",GreatestCommonDivisor(m,n));
printf("最小公倍数是%d。 ",LeastCommonMultiple(m,n));
return0;
}
7. c语言编程最大公约数最小公倍数
while(scanf("%d%d",&m,&n), m<0 || n<0); j=m; while(j/n!=0) //在这层循环中只有一条语句 j=j+m; 当j/n!=0的时候循环语句继续执行 j=j+m; //接下来我觉得程序有问题,比如说20与25代入程序:20/25=0,直接结束循环,输出 20,结果明显错误,那下一步求最小公倍数就更是错的了。 k=(m*n)/j; printf("最小公倍数是%d\n最大公约数是%d\n ",k,j); 第二道题: void main() { int p,r,n,m,temp; printf("请输入两个正整数n,m:"); scanf("%d,%d",&n,&m); if (n<m) //此步是将大数字赋值给m {temp=n; n=m; m=temp; } p=n*m; while (m!=0) {r=n%m; //小的数字和大数字取余结果必定是原来的小数字,大和小取余结果相当于减去 小的数 n=m; //这种求公约数原理就是利用求余来减少重复相减的次数,其实也就属于辗转相除法 m=r; //辗转相除法就是对于给定的两个数,用较大的数除以较小的数,若余数不为零,则将对余数和较小的数构成新的一对数,继续上面的除法,直到大数被小数除尽,则这时较小的数就是原来两倍的最大公约数。
8. 用c语言编程输入两个整数,求其最大公约数和最小公倍数
#include"stdio.h"
main()
{
intm,n,t,h,a,b,q;
printf("输入m,n的值:");
scanf("%d%d",&m,&n);
a=m;
b=n;
if(n>m)
{t=m;m=n;n=t;}
while(m%n!=0)
{h=n;n=m%n;m=n;}
a=a/n;b=b/n;q=a*b*n;
printf("两数最大公约数为%d,最小公倍数为%d ",n,q);
}
9. c语言编程:输入两个正整数,求最大公约数和最小公倍数
#include
voidmain(){
inta,b,n1,n2,t;
while(true)
{
printf("任意输入两个正整数: ");
scanf("%d%d",&n1,&n2);
if(n1
{
t=n1;
n1=n2;
n2=t;
}
a=n1;
b=n2;
while(b!=0){/*利用辗除法,直到b为0为止*/
t=a%b;
a=b;
b=t;
}
printf("最大公约数为:%d ",a);
printf("最小公倍数为:%d ",n1*n2/a);
}}
(9)编程求最大公约数和最小公倍数扩展阅读
C语言求最大公约数辗转相除法
#include<stdio.h>
intgcd(intm,intn);//将辗转相除的过程封装为函数,使主函数结构清晰。
intmain(void)
{
inta,b;
while(~scanf("%d%d",&a,&b)){//多组数据输入时的方式之一与while(scanf("%d%d",&a,&b)!=EOF)用途相同
printf("%d ",gcd(a,b));
return0;
}
intgcd(intm,intn)
{
returnn?gcd(n,m%n):m;//此函数将辗转相除的过程以递归的形式呈现,简化程序属于常规套路。
}
10. [C语言]编程:输入两个正整数,求其最大公约数和最小公倍数
程序如下:
main(){
int a,b,r,gcd,lcm;
printf("请输入两个正整数:");
scanf("%d%d",&a,%b);
while(r=a%b){
a=b;
b=r;
}
gcd=b;
lcm=a*b/gcd;
printf("gcd=%d,lcm=%d\n",gcd,lcm);
}
就是这样。
有什么问题请留言。