Задача
Степан нещодавно відпочивав у Японії і привіз звідти нову жувальну гумку. На першій парі в університеті він поділився гумкою зі своїм товаришем. Дочекавшись моменту, коли лектор повернувся до дошки, на рахунок «три — чотири» хлопці дружньо почали надувати бульбашки. Відомо, що Степан надуває бульбашку до максимально можливого розміру за час $t_1$, після чого бульбашка миттєво лопається, і Степан починає надувати бульбашку заново з тією ж швидкістю. Товариш Степана робить те ж саме за час $t_2$.
Весь цей час викладач настільки захоплений доведенням теореми, що взагалі нічого не чує. І тільки коли обидві бульбашки лопнуть одночасно, викладач почує шум і обернеться. І тоді вже точно студентам попаде на горіхи, а більше усього тому, хто приніс на пару жувальні гумки.
Визначте, скільки часу хлопці можуть насолоджуватись надуванням бульбашок, не замічені викладачем.
Наприклад, якщо $t_1 = 2$, $t_2 = 3$, то буде відбуватись наступне:
Степан надуває бульбашку з моменту часу $t = 0$ до моменту часу $t = 2$, потім бульбашка лопається, і він надуває бульбашку знову — з моменту часу $t = 2$ до моменту часу $t = 4$, а потім ще раз — з моменту часу $t = 4$ до $t = 6$.
Товариш Степана надуває бульбашку з $t = 0$ до $t = 3$ і ще раз з $t = 3$ до $t = 6$.
В момент часу $t = 6$ бульбашки лопаються одночасно в обох студентів, викладач повертається і каже: «Все, Степан! Ти мене дістав!».
Формат вхідних даних
Перший рядок вхідного файлу містить два цілих числа $t_1, t_2 (1 \leqslant t_1, t_2 \leqslant 10^9).$
Формат вихідних даних
Вихідний файл повинен містити одне ціле число — час, протягом якого Степан з товаришем можуть насолоджуватись надуванням бульбашок.
Тести
№ | Вхідні дані | Вихідні дані |
1 | 2 3 | 6 |
2 | 1 16 | 16 |
3 | 10 10 | 10 |
4 | 100000000 150000000 | 300000000 |
5 | 17 41 | 697 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> using namespace std; long nod (int a, int b) { return b == 0 ? a : nod (b, a % b); } int main() { int t1, t2; cin >> t1 >> t2; cout << t1 * (t2 / nod (t1, t2)); return 0; } |
Розв’язання
-
Задача зводиться до пошуку НСК (найменше спільне кратне). Формула для знаходження $НСК$: $НСК(a, b)={{a\cdot b}\over{НСД(a, b)}}$, де НСД — найбільший спільний дільник. Для його знаходження скористуємось алгоритмом Евкліда, У даному розв`язку реалізованим за допомогою рекурсії у функції $nod$.
Посилання
- Задача на e-olymp
- Код на ideone
- Зараховане розв’язання на e-olymp