Submission #244500083 - Codeforces
题目:
思路:
此题要从奇偶性上入手。(注意除的是奇因数,即一个奇数。我想成质数了)
1.当A选手开局是1时,A败。
2.当A选手开局是2 和奇数时,A必胜。(奇数除以自己就是1,给对手1)
3.当A选手开局是偶数 ,分情况讨论(此题难点)
偶数可以写成 (2^x)*y (y不是2的倍数,都给前一项了,所以y是奇数)
当y是1时,这个偶数是2^x,没有奇因数,只能减一。
这样的话对手拿到奇数,如果是给2减的1,则A胜,否则由上文知,A败。
当y>1时,
因为减1直接败,我们给它除去这个y。
- //是质数,除掉,对手偶,2我们输,不是2我们赢
- //不是质数,赢:除完是2就别除完,不是2就除完
核心代码:
int is_prime(int x)
{
for(int i = 2; i * i <= x; i++)
{
if (x % i == 0)return 0;
}
return 1;
}
void solve()
{
int n;
cin >> n;
if (n == 1)
{
cout << "FastestFinger" << endl;
}
else if (n == 2||n%2==1)
{
cout << "Ashishgup" << endl;
}
else
{
int tmp = n;
while (tmp % 2 == 0)
{
tmp /= 2;
}
if (tmp == 1)//2^x
{
cout << "FastestFinger" << endl;
}
else
{
if (is_prime(tmp)&&n/tmp==2)
{
cout << "FastestFinger" << endl;
}
else
cout << "Ashishgup" << endl;
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
while (t--)
{
solve();
}
return 0;
}