帮看看,求两个数的最小公倍数和最大公约数

时间:2021-07-29 12:37:02
我输入了两个数,但怎么不对
main()
{
int a,b,c;
scanf("%d%d",&a,&b);
if(a>b)
for(c=b;c>=1;c--)
if(a%c==0)
{
printf("%c\n",c);
break;
}
if(a<b)
for(c=b;;c++)
if(c%a==0)
{
printf("%c\n",c);
break;
}
getch();

17 个解决方案

#1


main()
{
int a,b,c,d,e;
scanf("%d,%d",&a,&b);
if(a<b)
{e=a;a=b;b=e;}   /*把大的数放在a中!*/
d=a*b
while(b!=0)
{c=a%b;a=b;b=c}  /*求a,b的最大公约数*/
printf("最大公约数和最小公倍数为:%d,%d",a,d/a);
}

#2


结果不对

#3


以前写过:Ctrl + V 给你
最小公倍数:
#include<stdio.h>

int lcm(int a,int b)
{
int temp , sum = 0;
if( a < b)
{
temp = a;
a = b ;
b = temp;
}
sum = a;
while(a%b!=0)
{
      a+=sum;
}
return a;
}

main()
{
  int num1 , num2 ,k;
  system("cls");
  printf("Input num1 and num2 \n");
  scanf("%d%d" , &num1 , &num2);
  k = lcm(num1 , num2);
  printf("\n%d",lcm(num1 , num2));
 }

#4


麻烦下次给点分啊~!

这题目不是在潭书上有答案吗?其实大数和小数可以交换

大家看下面的代码: 

求任意两个正整数的最大公约数和和最小公倍数
*问题分析与算法设计
    手工方式求两个正整数的蝚大公约数的方法是用辗转相除法,在程序中可以模拟这种方式。
*程序与程序注释
#include<stdio.h>
void main()
{
    int a,b,num1,num2,temp;
    printf("Input a & b:");
    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("The 最大公 of %d and %d is: %d\n",num1,num2,a);  /*输出最大公约数*/
    printf("The 最小 of them is: %d\n",num1*num2/a);       /*输出最小公倍数*/

#5


if(num1>num2) 这个判断条件 可以换成 if(num1<num2)

不信你们去看看

#6


楼上求最小公倍数的方法好象不太正确
再贴个算法
function lcm(a,b:integer):integer; 
     begin 
          if a< b then swap(a,b); 
          lcm:=a; 
          while lcm mod b >0 do inc(lcm,a); 
     end; 

#7


欧几里德算法

#8


各位能否就我的这个思路进行修改

#9


你的这个啊,我给你说一个数,看一下啊,输入.21,8
的话,会用第一部分
for(c=b;c>=1;c--)
if(a%c==0)
{
printf("%c\n",c);
break;
}
你看一下,只是把c=8
21%c!=0
c=7
21%c==0;
结束,这怎么会对呢!要改你的那个就太多了,改完后我想,你的这个就不是你写的了,全都改了

#10


帮看看这个,为什么当我输入12和15的时候它显示有4行前2行是对的,3和60.但后两行怎么显示1和180.其他的数都没这种情况
main()
{
int a,b,c;
printf("input two numbers:\n");
scanf("%d%d",&a,&b);
if(a>b)
c=b;
else c=a;
for(;c>0;c--)
if(a%c==0&&b%c==0)
printf("greatest common divisor=%d\nlease common multiple=%d\n",c,a*b/c);
getch();
}

#11


高手快来帮忙啊

#12


用欧几里德算法算出a和b的最大公约数后,用 a*b/最大公约数 就是最小公倍数。

#13


我是这样啊,但我输入12和15之后它怎么多出两行东西.你运行看看

#14


for(;c>0;c--)
if(a%c==0&&b%c==0)
printf("greatest common divisor=%d\nlease common multiple=%d\n",c,a*b/c);
getch();
这段程序不是求最大公约数,而是求所有的公约数。只要在求出第一个公约数的时候加个break语句跳出循环就可。

#15


我认为你的错很多
而且你这个只是求最大公数

#include <stdio.h>
main()
{
int m,n,t,b,y;
scanf("%d%d",&m,&n);
for (t=1;t<=m&&t<=n;t++)
 { 
  if(m%t==0&&n%t==0) y=t;
 }
 if(m>n) b=m;
 else b=n;
 for (;!(b%m==0&&b%n==0)&&b<=m*n;b++);

 printf("%d %d\n",y,b);

getch();
}

#16


我写的程序发不上来。。。“请不要发表可能给我们带来伤害的言论,谢谢配合”

#17


#include <iostream.h>

void main()
{
int a,b,min;
cout<<"Please input two number :";
cin>>a>>b;
min=a<b?a:b;
int t=0;
for(int i=2;i<=min;i++)
{
if(a%i==0&&b%i==0)
{
t=i;
}
}
if(t==0)
{
cout<<"No greatest common divisor.\n";
cout<<"Min common times :"<<(a*b)<<endl;
}
else
{
cout<<"The greatest common divisor is :"<<t<<endl;
cout<<"Min common times :"<<(a*b)/t<<endl;
}
cout<<endl;
}

#1


main()
{
int a,b,c,d,e;
scanf("%d,%d",&a,&b);
if(a<b)
{e=a;a=b;b=e;}   /*把大的数放在a中!*/
d=a*b
while(b!=0)
{c=a%b;a=b;b=c}  /*求a,b的最大公约数*/
printf("最大公约数和最小公倍数为:%d,%d",a,d/a);
}

#2


结果不对

#3


以前写过:Ctrl + V 给你
最小公倍数:
#include<stdio.h>

int lcm(int a,int b)
{
int temp , sum = 0;
if( a < b)
{
temp = a;
a = b ;
b = temp;
}
sum = a;
while(a%b!=0)
{
      a+=sum;
}
return a;
}

main()
{
  int num1 , num2 ,k;
  system("cls");
  printf("Input num1 and num2 \n");
  scanf("%d%d" , &num1 , &num2);
  k = lcm(num1 , num2);
  printf("\n%d",lcm(num1 , num2));
 }

#4


麻烦下次给点分啊~!

这题目不是在潭书上有答案吗?其实大数和小数可以交换

大家看下面的代码: 

求任意两个正整数的最大公约数和和最小公倍数
*问题分析与算法设计
    手工方式求两个正整数的蝚大公约数的方法是用辗转相除法,在程序中可以模拟这种方式。
*程序与程序注释
#include<stdio.h>
void main()
{
    int a,b,num1,num2,temp;
    printf("Input a & b:");
    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("The 最大公 of %d and %d is: %d\n",num1,num2,a);  /*输出最大公约数*/
    printf("The 最小 of them is: %d\n",num1*num2/a);       /*输出最小公倍数*/

#5


if(num1>num2) 这个判断条件 可以换成 if(num1<num2)

不信你们去看看

#6


楼上求最小公倍数的方法好象不太正确
再贴个算法
function lcm(a,b:integer):integer; 
     begin 
          if a< b then swap(a,b); 
          lcm:=a; 
          while lcm mod b >0 do inc(lcm,a); 
     end; 

#7


欧几里德算法

#8


各位能否就我的这个思路进行修改

#9


你的这个啊,我给你说一个数,看一下啊,输入.21,8
的话,会用第一部分
for(c=b;c>=1;c--)
if(a%c==0)
{
printf("%c\n",c);
break;
}
你看一下,只是把c=8
21%c!=0
c=7
21%c==0;
结束,这怎么会对呢!要改你的那个就太多了,改完后我想,你的这个就不是你写的了,全都改了

#10


帮看看这个,为什么当我输入12和15的时候它显示有4行前2行是对的,3和60.但后两行怎么显示1和180.其他的数都没这种情况
main()
{
int a,b,c;
printf("input two numbers:\n");
scanf("%d%d",&a,&b);
if(a>b)
c=b;
else c=a;
for(;c>0;c--)
if(a%c==0&&b%c==0)
printf("greatest common divisor=%d\nlease common multiple=%d\n",c,a*b/c);
getch();
}

#11


高手快来帮忙啊

#12


用欧几里德算法算出a和b的最大公约数后,用 a*b/最大公约数 就是最小公倍数。

#13


我是这样啊,但我输入12和15之后它怎么多出两行东西.你运行看看

#14


for(;c>0;c--)
if(a%c==0&&b%c==0)
printf("greatest common divisor=%d\nlease common multiple=%d\n",c,a*b/c);
getch();
这段程序不是求最大公约数,而是求所有的公约数。只要在求出第一个公约数的时候加个break语句跳出循环就可。

#15


我认为你的错很多
而且你这个只是求最大公数

#include <stdio.h>
main()
{
int m,n,t,b,y;
scanf("%d%d",&m,&n);
for (t=1;t<=m&&t<=n;t++)
 { 
  if(m%t==0&&n%t==0) y=t;
 }
 if(m>n) b=m;
 else b=n;
 for (;!(b%m==0&&b%n==0)&&b<=m*n;b++);

 printf("%d %d\n",y,b);

getch();
}

#16


我写的程序发不上来。。。“请不要发表可能给我们带来伤害的言论,谢谢配合”

#17


#include <iostream.h>

void main()
{
int a,b,min;
cout<<"Please input two number :";
cin>>a>>b;
min=a<b?a:b;
int t=0;
for(int i=2;i<=min;i++)
{
if(a%i==0&&b%i==0)
{
t=i;
}
}
if(t==0)
{
cout<<"No greatest common divisor.\n";
cout<<"Min common times :"<<(a*b)<<endl;
}
else
{
cout<<"The greatest common divisor is :"<<t<<endl;
cout<<"Min common times :"<<(a*b)/t<<endl;
}
cout<<endl;
}