求两个正整数的最大公约数和最小公倍数并拓展到n个正整数

输入两个正整数m和n求其最大公约数和最小公倍数
用辗转相除法进行求解
#include
int main()
{
int m,n,r,p,t;
while(~scanf("%d %d",&n,&m))//输入多组值
{
p=m*n;//科普:n个数的乘积与他们的最小公约数和最大公倍数的值相等
if(n>m)//将简答的值赋给m,否则交换他们的值
{
t=n;
n=m;
m=t;
}
while(n!=0)//辗转相除法求最大公约数
{
r=m%n;
m=n;
n=r;
}
printf("最大公约数为%d\n",m);
printf("最小公倍数为%d\n",p/m);
}
return 0;
}
辗转相除法:定义自己百度
拓展:求n个数的最小公倍数和最大公约数
运用递归的思想
#include
int f( int x,int y)
{
int t,r,s;
if(x {
t=x;
x=y;
y=t;
}
while(y!=0)
{
r=x%y;
x=y;
y=r;
}s=x;
return s;//跟上面两个数的求最大公约数的方法一样
}
int main()
{
int n1,n2;
int i,n;
while(scanf("%d",&n)!=EOF)//输入n个整数,并可以输入多组
{
scanf("%d",&n1);//就相当于化学思想里的定一议二
for(i=1; i {
scanf("%d",&n2);
);//每次都将n1和n2的最小公倍数赋值n1,依次进行下去,这就是递归的思想
}
printf ("n个数的最小公倍数为%d\n",n1);

}
return 0;
}

//上面运用n1=(n1/f(n1,n2)*n2/f(n1,n2))*f(n1,n2)是有的题目中要求在int 范围内,n1*n2的值可能大于这个范围
这是我的理解。。。。。

你可能感兴趣的:(c语言,生活)