题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1831
这道题我开始还以为要用SG函数,或者是我不知道的博弈方法,结果打个表之后发现这是个找规律的题,这个题的规律藏的还挺深的。另外还要注意的是,这个题的题面有问题,有一个操作应为将石子等分之后,取出一堆,并用这一堆继续进行游戏(不是将这一堆拿出去啊)。还有,这道题说的是最后一个取的人输,不是常规的无法取石子的人败,在分析NP状态时要注意一下。
下面是AC代码:
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
bool isprime(int n)
{
for(int i = 2;i <= sqrt(n+0.5);i++)
if(n % i == 0)
return false;
return true;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n == 1 || (isprime(n) && (n != 2 && n != 17)) || (!isprime(n) && (n == 16 || n == 34 || n == 289)))
printf("NIE\n");
else
printf("TAK\n");
}
return 0;
}