“无体育,不清华”、“每天锻炼一小时,健康工作五十年,幸福生活一辈子”
在清华,体育运动绝对是同学们生活中不可或缺的一部分。为了响应学校的号召,模范好学生王队长决定坚持晨跑。不过由于种种原因,每天都早起去跑步不太现实,所以王队长决定每a天晨跑一次。换句话说,假如王队长某天早起去跑了步,之后他会休息a-1天,然后第a天继续去晨跑,并以此类推。
王队长的好朋友小钦和小针深受王队长坚持锻炼的鼓舞,并决定自己也要坚持晨跑。为了适宜自己的情况,小钦决定每b天早起跑步一次,而小针决定每c天早起跑步一次。
某天早晨,王队长、小钦和小针在早起跑步时相遇了,他们非常激动、相互鼓励,共同完成了一次完美的晨跑。为了表述方便,我们把三位同学相遇的这天记为第0天。假设三位同学每次晨跑的时间段和路线都相同,他们想知道,下一次三人在跑步时相遇是第几天。由于三位同学都不会算,所以希望由聪明的你来告诉他们答案。
两种基于辗转相除法求最大公倍数和最小公约数的方法
一,
#include<stdio.h>
long long gcd(long long a, long long b)
{
return (b == 0) ? a : gcd(b, a % b); //使用迭代的方法不断刷新b和a直到a%b==0
}
int main()
{
long long a,b,c, t, x;
scanf("%lld %lld %lld", &a, &b, &c);
t = a * b / gcd(a, b);
x = t * c / gcd(t, c);
printf("%lld", x);
return 0;
}
二,
//求输入的三个数字的最小公倍数
#include<stdio.h>
int gcd(int a,int b)
{
int temp;
if(a>b){
while(a % b != 0 ){
temp = b;
b = a % b;
a = temp;
}
}
else {
temp = b;
b = a;
a = temp;
while(a % b != 0 ){
temp = b;
b = a % b;
a = temp;
}
}
return b;
}
int main()
{
int a,b,c;
int n;
int m;
scanf("%d %d %d",&a,&b,&c);
n = a * b / gcd(a,b);
m = gcd(n,c);
printf("%d", n * c / m );
return 0;
}