题目描述
运动会上,两个班级在为场上的运动员鼓掌加油。其中A班的同学每x秒钟鼓掌一次,B班的同学每y秒钟鼓掌一次,每次鼓掌都持续1秒钟。这样的话,在n秒钟之内,共有多少秒的时间有掌声?
x=2,y=3,n=10的情况如下:
输入
一行,三个正整数 x,y,n。
输出
一行,一个整数,表示有掌声的时间总长度。
样例输入 Copy
2 3 10
样例输出 Copy
7
提示
对于 50%的数据:0<x,y<25000,n<=1000000;
对于 100%的数据:0<x,y<40000,n<=1000000000。
这道题暴力枚举肯定超时,所以用a+b减去a,b的最小公倍数,就是鼓掌时长啦。
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
if(a%b==0)
return b;
return gcd(b,a%b);
}
int main()
{
int n,a,b,x,y,z;
cin>>a>>b>>n;
x=n/a;
y=n/b;
z=n/(a/gcd(a,b)*b);
cout<<x+y-z;
return 0;
}
gcd是最大公因数函数,也可以用直接__gcd(a,b)做。
谢谢大家观看。
点个赞吧!