#include<stdio.h>
int main(){
int a,b,num1,num2,temp;
printf("please input two number:\n");
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\n",a);
printf("gongbeishu:%d\n",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,求其最大公约数和最小公倍数*/
#include <stdio.h>
void main()
{
int m,n,j,i,k;
scanf("%d,%d" ,&m,&n);
(m<n)?j=m:j=n;
for (i=1;i<=j;i++)
{
if (m%i == 0 && n%i ==0)
k =i;
}
printf("最大公约数是:%d/n" ,k);
(m>n)?i=m:i=n;
j = m*n;
for (;i<=j;i++)
{
if (i%m==0 && i%n==0)
{
k = i;
break ;
}
}
printf("最小公倍数是:%d/n" ,k);
}
#include <stdio.h>
int main()
{
int m,n,j,i,k;
scanf("%d,%d" ,&m,&n);
(m<n)?j=m:j=n;
for (i=1;i<=j;i++)
{
if (m%i == 0 && n%i ==0)
k =i;
}
printf("最大公约数是:%d\n" ,k);
//printf("%d\n",k);
(m>n)?i=m:i=n;
j = m*n;
for (;i<=j;i++)
{
if (i%m==0 && i%n==0)
{
k = i;
break ;
}
}
printf("最小公倍数是:%d\n" ,k);
//printf("%d\n",k);
}
第一次\n错写成/n了,但是:
我测试的结果:
[zhanggang@pss-inv-asi-1 testself]$ ./testcopy
24,18
6
72
和你的不一样啊!
#include <stdio.h>
void main()
{
int m,n,j,i,k;
scanf("%d,%d" ,&m,&n);
(m<n)?j=m:j=n;
(m<n)?i=n:i=m;
for (;i<=j;i--)
{
if (m%i == 0 && n%i ==0)
{
k = i;
break;
}
}
printf("最大公约数是:%d" ,k);
(m>n)?i=m:i=n;
j = m*n;
for (;i<=j;i++)
{
if (i%m==0 && i%n==0)
{
k = i;
break;
}
}
printf("最小公倍数是:%d" ,k);
}