考虑一下明显的必败态和必胜态
Ⅰ.如果给我的是一个1,那么必败
Ⅱ.如果给我的是一个2,那么我减去1,必胜
Ⅲ.如果给我的是一个没有奇数因子的偶数,必败
因为我被迫减去1,得到一个奇数.那么对手一定除以自身返回1给我
如此一来,想赢,就要尽可能构造情况Ⅲ
特判一下初始数是1和2的情况
一.初始数是奇数
我除以自身返回1给对手,我必胜
一.初始数是偶数
能不能构造情况Ⅲ呢?
扫描二维码关注公众号,回复:
11337016 查看本文章
这么想吧,一个偶数可以拆分为a个奇数因子和b个偶数因子相乘
b个偶数相乘一定是偶数,那么这a个奇数因子乘在一起也一定是奇数
如此一来,把a个奇数因子记作x,我除以x,得到的是一个没有奇数因子的偶数
对手拿到这个数,哎呀,被迫减1,那我们得到不为1的奇数,除以自己
返回一个1给对手.对手:我∗∗∗
赢了。
补充
可能我还没有讲清楚补充一点
当我们除以奇数因子后得到的是一个偶数,而且偶数不能为2
因为是2的话对手仍然是被迫减1得到1给我们,但是此时我们却输了
所以特判一下除以后是否是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;
}
}