## https://yukicoder.me/problems/no/2128 import math MOD = 998244353 def calc_gcd(A, B): """ 正の整数A, Bの最大公約数を計算する """ a = max(A, B) b = min(A, B) while a % b > 0: c = a % b a = b b = c return b def solve(X, A, B): if A == B: if X % A == 0: return 1 else: return 2 # A B: A, B = B, A gcd = calc_gcd(A, B) lcm = B * (A // gcd) x_lcm = (X // lcm) + (1 if X % lcm > 0 else 0) upper_x = (A // gcd) * x_lcm x = (X // B) + (1 if X % B > 0 else 0) diff = upper_x - x diff %= MOD diff *= 2 diff %= MOD if upper_x == x: b1 = B * upper_x a_set = {b1, X} y = (X // A ) + (1 if X % A > 0 else 0) a = y * A if X <= a <= b1: a_set.add(a) diff += (len(a_set)) diff %= MOD else: b1 = B * upper_x b2 = B * x a_set = {b1, b2, X} y = (X // A ) + (1 if X % A > 0 else 0) a = y * A if X <= a <= b2: a_set.add(a) diff += (len(a_set) - 1) diff %= MOD return diff def solve2(X, A, B): from collections import deque passed_set = set() queue = deque() queue.append(X) passed_set.add(X) while len(queue) > 0: x =queue.popleft() x_a = (x // A) + (1 if x % A > 0 else 0) y_a = x_a * A if y_a not in passed_set: passed_set.add(y_a) queue.append(y_a) x_b = (x // B) + (1 if x % B > 0 else 0) y_b = x_b * B if y_b not in passed_set: passed_set.add(y_b) queue.append(y_b) return len(passed_set) def main(): T = int(input()) answers = [] for _ in range(T): X, A, B = map(int, input().split()) ans = solve(X, A, B) # print(solve2(X, A, B)) answers.append(ans) for ans in answers: print(ans) if __name__ == "__main__": main()