3.1 Рухи дрона і найбільший спільний дільник

Показуємо другу частину скрипта: для кожного руху (A, B) беремо abs(A), abs(B), рахуємо gcd(a, b) і збільшуємо count, якщо d > 1.

← До списку

Рухи і результат перевірки

#ABabs(A)abs(B)dd>1
Поточний рухA=?, B=?з moves
Без знакуa=?, b=?abs(A), abs(B)
gcdd=?найбільший спільний дільник
Умоваd > 1?чи рахуємо рух
Лічильникcount = 0скільки уже підходить
Файл0 / 0рух / всього

Як рахується gcd(a, b)

ще не вибрано рух
КрокДілення з остачею
?
чекаємо на рух
Коли d > 1, рух додається до відповіді.
поточний рух рух зараховано рух не підходить gcd через остачі

Що тут важливо

Знак руху не важливий для дільника, тому скрипт робить abs(A) і abs(B).
gcd(a, b) питає: яке найбільше число ділить обидві координати руху без остачі.
d > 1 означає, що рух має нетривіальний спільний крок, тому count збільшується.
d = 1 означає, що спільного дільника більше за 1 немає, тому рух пропускаємо.