测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A23491. 红绿灯小X家门前有两个红绿灯,小X做完了数学作业,闲着无聊便在窗边观察。他发现这两个红绿灯亮红灯和亮绿灯的时间是相等的,第一个红绿灯亮p秒绿灯,再亮p秒红灯……,第二个红绿灯亮q秒绿灯,再亮q秒红灯……,如此循环往复。现在恰好两个红绿灯都从红灯变成了绿灯,小X想要知道未来的2pq秒内,有多少秒满足两个红绿灯都亮绿灯。输入第一行2个正整数p、q,含义见题面。输出输出一行一个整数表示在未来的2pq秒…

填空题 中等

题目描述

红绿灯

小X家门前有两个红绿灯,小X做完了数学作业,闲着无聊便在窗边观察。他发现这两个红绿灯亮红灯和亮绿灯的时间是相等的,第一个红绿灯亮p秒绿灯,再亮p秒红灯……,第二个红绿灯亮q秒绿灯,再亮q秒红灯……,如此循环往复。

现在恰好两个红绿灯都从红灯变成了绿灯,小X想要知道未来的2pq秒内,有多少秒满足两个红绿灯都亮绿灯。

输入

第一行2个正整数p、q,含义见题面。

输出

输出一行一个整数表示在未来的2pq秒内,有多少秒满足两个红绿灯都亮绿灯。

样例输入1

2 3

样例输入2

18 66

样例输入3

1 255

样例输出1

3

样例输出2

612

样例输出3

128

提示

样例解释1

在未来的12秒内,第一个红绿灯在第1,2,5,6,9,10秒亮绿灯。

第二个红绿灯在第1,2,3,7,8,9秒亮绿灯。

在第1,2,9秒时,同时亮绿灯,一共3秒。

数据规模

对于测试点1-3:1<=p、q<=1000

对于测试点4-5:p=1, 1<=q<=10^9

对于测试点6-9:1<=p、q<=10^9 且 p、q 互质,即 p、q 的最大公约数是1

对于测试点10-12:1<=p、q<=10^9

参考答案

#include <iostream> using namespace std; // 最大公约数 long long gcd(long long a, long long b) { while (b) { a %= b; swap(a, b); } return a; } int main() { long long p, q; cin >> p >> q; long long g = gcd(p, q); long long lcm = p / g * q; // 最小公倍数 // 2pq秒 = 2g*lcm 秒,每个周期(lcm秒)内的绿灯重叠时间为 g cout << g * (2 * p * q / lcm) / 2 << endl; return 0; }
上一题 下一题