标签:inline 复杂 个人 lan http pac 偶数 大于 形式
给出同一个数 \(n\) \((1\leq 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\n");
else if(n==2) printf("Ashishgup\n");
else if(n%2==1) printf("Ashishgup\n");
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\n");
else printf("FastestFinger\n");
}
}
return 0;
}
标签:inline 复杂 个人 lan http pac 偶数 大于 形式
原文地址:https://www.cnblogs.com/1024-xzx/p/13189216.html