解题思路:
 本题采用穷举法。两个数a,b。则最大公约数的范围是[1,Max(a,b)]

 最小公倍数等于a*b/最大公约数!

不断穷举所有的可能,直到最先遇到一个公因子使a和b都能整除它,则该公因子为最大公约数!

然后跳出循环。

方法二: C++自带求最大公约数的API:_ _gcd(a,b)

注意事项:
a,b的最值用三目运算符?:求解。Max=a>b?a:b

参考代码:

//解题方法:本题采用穷举法:
//最大公约数maxY肯定是小于a和b的最大值的,
//所以将最大公约数赋值为a,b的最大值,maxY=a>b?a:b
//最小公倍数minB与最大公约数maxY的关系是  minB=(a*b)/maxY 
//然后一一穷举!直到找到后跳出循环
  
#include <iostream>   //c++标准输入输出流 
using namespace std;  //std命名空间 

int main()
{
	int a,b,maxY,minB; //maxY为最大公约数,maxB为最小公倍数     
	cin>>a>>b;  //输入a,b
	for(maxY=a>b?a:b;maxY>=1;maxY--)//a>B?a:b是求a,b的最大值 
	{
		if(a%maxY==0 && b%maxY==0)  //a,b都能整除最大公约数时, 
		{
			minB=a*b/maxY;           
			cout<<maxY<<" "<<minB<<endl;
			break;		            //找到maxY,minB后跳出循环 
		}	
	}	
	return 0;
}


以下为蓝桥杯的一道题目:

问题描述

  编写一函数lcm,求两个正整数的最小公倍数。

样例输入

一个满足题目要求的输入范例。
例:

3 5

样例输出

与上面的样例输入对应的输出。
例:

数据规模和约定

  输入数据中每一个数的范围。
  例:两个数都小于65536。


注意:

注意范围,如果按照上面的这种方法求最小公倍数,需要注意的是数值的范围。

65535 x 65535 = 4294836225

需要用long long存放。

输入输出用%I64d


代码:

#include <stdio.h>

long long lcm(long long a,long long b)
{
	long long gcd;  //最大公约数
	for(gcd=a>b?a:b; gcd>=1; gcd--)
	{
		if(a%gcd==0 && b%gcd==0)
		{
			printf("%I64d",a*b/gcd);
			break;
		}
	 } 
}

int main()
{
	long long a,b;
	scanf("%I64d%I64d",&a,&b);
	lcm(a,b);	
	return 0;
}


点赞(10)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论