原题链接:[编程入门]最大公约数与最小公倍数
解题思路:
本题采用穷举法。两个数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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复