#include <iostream>
using namespace std;
int kaing(int, int, int, int);
int main()
{
int T;
cin >> T;
for (int i = 0; i < T; i++)
{
int M, N, x, y;
cin >> M >> N >> x >> y;
kaing(M, N, x, y);
}
return 0;
}
int kaing(int M, int N, int x, int y)
{
int a, b;
a = 0, b = 0;
int a2, b2;
while (true)
{
a2 = a * M + x;
b2 = b * N + y;
if (a2 == b2)
{
cout << a2 << "\n";
return 0;
}
else if (a2 > b2)
b += 1;
else
{
a += 1;
if (a * M + x > M * N)
{
cout << -1 << "\n";
return -1;
}
}
}
}
해당 구문을 python으로 변환하면 시간 초과가 발생하고 PyPy로 실행 시 통과됩니다
그래서 Python으로 돌아가는 알고리즘은
최대 공약수를 이용했습니다.
import sys
import math
def z(x, max_k):
while x <= max_k:
if x % n == y % n:
return x
x += m
return -1
input = sys.stdin.readline
for i in range(int(input())):
m, n, x, y = map(int, input().split())
max_k = m * n // math.gcd(m, n)
if y > x:
m, n = n, m
x, y = y, x
print(z(x, max_k))