n1, n2为你输入的值
int x=n1;
int y=n2;
if(n1*n2!=0){
int temp = Math.Max(n1, n2);
n2 = Math.Min(n1, n2);//n2中存放两个数中最小的
n1 = temp;//n1中存放两个数中最大的
while(n2!=0)
{
n1 = n1 > n2 ? n1 : n2;//使n1中的数大于n2中的数
int m=n1 % n2;
n1 = n2;
n2 = m;
}
System.out.println(n1);//最大公约数
System.out.ptintln(s/n1*y);//最小公倍数
}else{
return 0;
}
下面的代码是用辗转相除法的方法,因为我不懂Java, 所以在这里只提供C 的代码,请参考!
首先说一下辗转相除法,辗转相除法是古希腊求两个正整数的最大公约数的,也叫欧几里德算法,
用较大的数除以较小的数,结果的余数和被除数构成新的一对数,继续做上面的除法,
直到大数被小数求尽,这个较小的数就是最大公约数.
现以求288和123的最大公约数为例,操作如下:
(288,123)--(42,123)--(42,39)--(3,39)则3就是他们的最大公约数。
至于最小公倍数, 则是两个数相乘,然后再除以最大公约数。
代码实现如下:
//求最大公约数和最小公倍数.
#include
void main()
{
int m=0,n=0,h,g;
int gcd(int,int);
int lcd(int,int,int);
scanf("%d %d",&m,&n);
h=gcd(m,n);
printf("最大公约数:%d\n",h);
g=lcd(m,n,h);
printf("最小公倍数:%d\n",g);
}
int gcd(int m,int n) //求最大公约数
{
int temp,r;
if(m
temp=m;
m=n;
n=temp;
}
while((r=m%n)!=0)
{
m=n;
n=r;
}
return n;
}
int lcd(int m,int n,int h) //求最小公倍数
{
return(m*n/h);
希望对你有帮助!