考虑一下明显的必败态和必胜态
Ⅰ . 如 果 给 我 的 是 一 个 1 , 那 么 必 败 Ⅰ.如果给我的是一个1,那么必败 Ⅰ.如果给我的是一个1,那么必败
Ⅱ . 如 果 给 我 的 是 一 个 2 , 那 么 我 减 去 1 , 必 胜 Ⅱ.如果给我的是一个2,那么我减去1,必胜 Ⅱ.如果给我的是一个2,那么我减去1,必胜
Ⅲ . 如 果 给 我 的 是 一 个 没 有 奇 数 因 子 的 偶 数 , 必 败 Ⅲ.如果给我的是一个没有奇数因子的偶数,必败 Ⅲ.如果给我的是一个没有奇数因子的偶数,必败
因 为 我 被 迫 减 去 1 , 得 到 一 个 奇 数 . 那 么 对 手 一 定 除 以 自 身 返 回 1 给 我 因为我被迫减去1,得到一个奇数.那么对手一定除以自身返回1给我 因为我被迫减去1,得到一个奇数.那么对手一定除以自身返回1给我
如 此 一 来 , 想 赢 , 就 要 尽 可 能 构 造 情 况 Ⅲ \color{Red}如此一来,想赢,就要尽可能构造情况Ⅲ 如此一来,想赢,就要尽可能构造情况Ⅲ
特判一下初始数是1和2的情况
一 . 初 始 数 是 奇 数 \color{Red}一.初始数是奇数 一.初始数是奇数
我 除 以 自 身 返 回 1 给 对 手 , 我 必 胜 我除以自身返回1给对手,我必胜 我除以自身返回1给对手,我必胜
一 . 初 始 数 是 偶 数 \color{Orange}一.初始数是偶数 一.初始数是偶数
能 不 能 构 造 情 况 Ⅲ 呢 ? 能不能构造情况Ⅲ呢? 能不能构造情况Ⅲ呢?
这 么 想 吧 , 一 个 偶 数 可 以 拆 分 为 a 个 奇 数 因 子 和 b 个 偶 数 因 子 相 乘 这么想吧,一个偶数可以拆分为a个奇数因子和b个偶数因子相乘 这么想吧,一个偶数可以拆分为a个奇数因子和b个偶数因子相乘
b 个 偶 数 相 乘 一 定 是 偶 数 , 那 么 这 a 个 奇 数 因 子 乘 在 一 起 也 一 定 是 奇 数 b个偶数相乘一定是偶数,那么这a个奇数因子乘在一起也一定是奇数 b个偶数相乘一定是偶数,那么这a个奇数因子乘在一起也一定是奇数
如 此 一 来 , 把 a 个 奇 数 因 子 记 作 x , 我 除 以 x , 得 到 的 是 一 个 没 有 奇 数 因 子 的 偶 数 如此一来,把a个奇数因子记作x,我除以x,得到的是一个没有奇数因子的偶数 如此一来,把a个奇数因子记作x,我除以x,得到的是一个没有奇数因子的偶数
对 手 拿 到 这 个 数 , 哎 呀 , 被 迫 减 1 , 那 我 们 得 到 不 为 1 的 奇 数 , 除 以 自 己 对手拿到这个数,哎呀,被迫减1,那我们得到不为1的奇数,除以自己 对手拿到这个数,哎呀,被迫减1,那我们得到不为1的奇数,除以自己
返 回 一 个 1 给 对 手 . 对 手 : 我 ∗ ∗ ∗ 返回一个1给对手.对手:我*** 返回一个1给对手.对手:我∗∗∗
赢 了 。 赢了。 赢了。
补充
可 能 我 还 没 有 讲 清 楚 补 充 一 点 可能我还没有讲清楚补充一点 可能我还没有讲清楚补充一点
当 我 们 除 以 奇 数 因 子 后 得 到 的 是 一 个 偶 数 , 而 且 偶 数 不 能 为 2 当我们除以奇数因子后得到的是一个偶数,而且偶数不能为2 当我们除以奇数因子后得到的是一个偶数,而且偶数不能为2
因 为 是 2 的 话 对 手 仍 然 是 被 迫 减 1 得 到 1 给 我 们 , 但 是 此 时 我 们 却 输 了 因为是2的话对手仍然是被迫减1得到1给我们,但是此时我们却输了 因为是2的话对手仍然是被迫减1得到1给我们,但是此时我们却输了
所 以 特 判 一 下 除 以 后 是 否 是 2 [ 代 码 中 有 判 断 的 ] 所以特判一下除以后是否是2[代码中有判断的] 所以特判一下除以后是否是2[代码中有判断的]
#include <bits/stdc++.h>
using namespace std;
int t,n;
int main()
{
cin >> t;
while(t--)
{
cin >> n;
if(n==1) cout<<"FastestFinger";
else if(n==2) cout<<"Ashishgup";
else if(n%2==1) cout<<"Ashishgup";
else
{
int flag=0,z=sqrt(n);
for(int i=2;i<=z;i++)//只要找到有奇数因子就行
{
if(n%i!=0) continue;
if(i%2==1&&(n/i)!=2) flag=1;
if((n/i)%2==1&&i!=2) flag=1;
}
if(flag) cout<<"Ashishgup";
else cout<<"FastestFinger";
}
cout<<endl;
}
}