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;}elsecout << "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;
}