题意:
给出同一个数 (n) ((1leq n leq 10^9)),两个人玩游戏,有两种操作:
1.除以一个大于 (1) 的奇数因子
2.当 (n>1) 时,可以减 (1)
无法操作的人输。
传送门
分析:
题目想复杂了,首先可以发现:
(n=1),必输;
(n=2),必胜;
(n>1& & n) 为奇数,必胜;
剩下对 (n) 为大于 (2) 的偶数的情况进行讨论:如果 (n) 有一个奇数的因子 (a),除以该因子的得到的数为is (b),是偶数。但偶数的情况不确定,那么,如何判断呢?当 (b) 为必胜时,那么 (b) 一定可以分解成一个奇数乘一个必败的偶数的形式,把此时得到的奇数和上一步的奇数合并得到一个更大的奇数,即当 (b) 有一个奇数因子,且除该因子的结果不为 (2),则必胜 (b) 为必胜。 如果 (b) 除奇数因子得到的偶数为必胜的,那么该偶数一定可以通过再次分解得到一个奇数和一个必败偶数。而只有该偶数为 (2) 时是不可分解的。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n==1) printf("FastestFinger
");
else if(n==2) printf("Ashishgup
");
else if(n%2==1) printf("Ashishgup
");
else
{
int f=0;
for(int i=2;i*i<=n;i++)
{
if(n%i) continue;
if((i&1)&&(n/i)!=2) f=1;
if(((n/i)&1)&&i!=2) f=1;
}
if(f) printf("Ashishgup
");
else printf("FastestFinger
");
}
}
return 0;
}