原题链接:[编程入门]最大公约数与最小公倍数
解题思路:
本题采用穷举法。两个数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;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复