根据添数博弈的规则,初始数池有两个整数x和y,两人轮流添数。每次操作选择数池中两个数计算差的绝对值,如果结果不在数池中则添加,否则游戏结束且当前玩家输。小A先手。游戏的关键在于初始两数的最大公约数(gcd)和较大值。所有能生成的数都是gcd的倍数,且不超过初始较大值。最终数池包含从gcd到较大值之间所有gcd的倍数。总操作次数(即新添数字的个数)为 max(x,y)/gcd(x,y)−2。若操作次数为奇数,先手小A获胜;否则后手小B获胜。
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
let params = [];
while ((line = await readline())) {
let tokens = line.split(" ");
// let a = parseInt(tokens[0]);
// let b = parseInt(tokens[1]);
// console.log(a + b);
params.push(tokens);
}
// console.log(params)
let t = parseInt(params[0][0]);
function gcd(x, y) {
while (y) {
[x, y] = [y, x % y];
}
return x;
}
for (let i = 1; i <= t; i++) {
let [x, y] = params[i].map((v) => parseInt(v));
// console.log(x,y)
let g = gcd(Math.max(x, y), Math.min(x, y));
let time = Math.max(x, y) / g - 2;
if (time % 2 != 0) {
console.log("A");
} else {
console.log("B");
}
// 求x,y的最大公约数-2
}
})();