千梦


私信TA

用户名:dxy0325

访问量:1816

签 名:

兴趣是最好的老师

等  级
排  名 8873
经  验 1197
参赛次数 0
文章发表 18
年  龄 18
在职情况 学生
学  校 BSU
专  业 数据科学与大数据技术

  自我简介:

解题思路:

一个定理:最大公约数和最小公倍数的乘积就是原来两个数的乘积,因此先计算出简单的最小公倍数,再利用定理就可以得到最小公倍数

本题也包含一般做法,即如何正确的求出最大公约数

注意事项:

①变量名称尽量代表实际意义,编程时要养成这样的好习惯。gcd是最大公约数(greatest common divisor),lcm是最小公倍数(least common multiple)

algorithm意为“算法”

②使用函数需要先在主函数中声明,在外部进行定义。


参考代码:

①简单方法:

#includeint main()
{
	int a,b,gcd,lcm;
	scanf("%d %d",&a,&b);
	for(lcm=1;;lcm++){//使用for循环,思想是让最小公倍数从1开始循环,直到能够同时整除a和b为止
	if(lcm%a==0&&lcm%b==0){
	        break;//此时跳出循环
	    }
	}
	gcd=a*b/lcm;//根据定理很容易得到最大公约数
	printf("%d %d",gcd,lcm);
	return 0;
}



②进阶方法:函数


要求到最大公约数,需要用到短除法:将原来的a和b相除(此时a必须是较大的一个值),b再除以得到的余数,如此递归,最后返回当余数为0时的除数,这个除数就是最大公约数

用4和6来验证:

6%4=2

4%2=0(此时除数为0,2即是4和6的最大公约数)

也可以用较大的两个数进行验证


#includeint main()
{
	int a,b,gcd,lcm;
	scanf("%d %d",&a,&b);
	int algorithm(int x,int y);//决定使用一种较为官方的算法,使用函数进行,先看它的定义
	int x,y;
	x=a>b?a:b;//这两句是实现短除法的前提条件,即保证x>y
	y=a>b?b:a;
	gcd=algorithm(x,y);//调用求最大公约数的算法并把结果给gcd
	lcm=a*b/gcd;//定理求最小公倍数
	printf("%d %d",gcd,lcm);
	return 0;
}
int algorithm(int x,int y){
    if(x%y!=0)
    {
        int c=x%y;//定义一个变量来存放新的除数
        algorithm(y,c);//递归,即y对c取余
    }
    else return y;//此时x对y取余余数为0,返回除数y
}


一定要多多上手实践哦!

 

0.0分

2 人评分

  评论区

  • «
  • »