Foyumaiorestion


私信TA

用户名:uq_40154070395

访问量:482

签 名:

等  级
排  名 28628
经  验 532
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:思考:输入m,n后,最小公倍数等于m,n均除以最大公约数min_后再乘以最大公约数max_(m*n/max_)所以,求出最大公约数是解出本题目的关键
我们来分3种情况考虑

  1. 两个数互成倍数,也是最简单的情况,此时较小的数n为最大公约数,较大的数m为最小公倍数;

  2. 两个数不互质,倒序遍历2~n,找最大公约数,

  3. 两个数互质,显而易见最大公约数为1;最小公倍数为m*n;
    注意事项:

    参考代码:



  4. #include<stdio.h>
    #include<stdlib.h>
    int main (){
    	int m,n;
    	int max_=0;//最大公约数
    	int min_=0;//最小公倍数 
    	int temp=0;
    	int k =0;
    	int flag=0;
    	scanf("%d %d",&m,&n);
    	if (m<n)
    	{temp=m;
    	m=n;
    	n=temp;
    	}//令m>n
    	
    	//若两数成倍数关系,则最大公约数为较小的那个,最大公倍数为较大的那个 
    	if(m%n==0) 
    {
    	max_=n;
    	min_=m;
    }
    	//倒着遍历2~n;寻找最大公约数
    	for(int i=n;i>1;i--){
    		if((n%i==0)&&(m%i==0))
    		{max_=i;
    		min_=m*n/i;
    		flag=1;
    		break;
    		}
    		//如果2~n都没能找出他们的因子,则说明两个数互质
    		//最小公约数为1,最大公倍数为m*n 
    		if(flag==0)
    		{
    		max_=1;
    		min_=m*n;
    	} }
    
    	 printf("%d %d",max_,min_);
    	
    	return 0;
    }
 

0.0分

0 人评分

  评论区

  • «
  • »