辗转相除解法
2026-06-28 20:00:35
发布于:上海
6阅读
0回复
0点赞
代码思路
题意:隔 a 天去一次代表周期为 a+1 天,三人首日第 1 天同去,下次同天为三周期最小公倍数 + 1。
用辗转相除法求最大公约数 gcd,通过 gcd 计算两数最小公倍数 lcm。
先算前两个数 lcm,再和第三个数求 lcm 得到总周期,最后 + 1 输出答案。
代码
#include<bits/stdc++.h>
using namespace std;
//辗转相除法求最大公约数
long long gcd(long long x,long long y){
return y?gcd(y,x%y):x;
}
//根据gcd求最小公倍数,先除后乘防止溢出
long long lcm(long long x,long long y){
return x/gcd(x,y)*y;
}
long long a,b,c;
int main(){
//输入间隔天数a,b,c
cin>>a>>b>>c;
//间隔a天,实际出行周期为a+1
a++;
b++;
c++;
//计算三个周期的最小公倍数
long long res=lcm(lcm(a,b),c);
//首日是第1天,总周期加1为下次共同就餐日期
cout<<(long long)res+1<<"\n";
return 0;
}
全部评论 1
- 置顶
源代码提交于2026/06/28晚上8:00左右
2026-06-28 来自 上海
1




有帮助,赞一个