51nod 1831 小C的游戏

Posted Soda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1831 小C的游戏相关的知识,希望对你有一定的参考价值。

小C和小L是好朋友,她们在玩一个游戏。 
一开始有一个大小为n的石子堆,小C先手。 
每次可以对这个石子堆拿走一个或者把这个石子堆分成等量的几份并只取其中一份(不能不变或只剩下一个)。 
如果取走最后一个人的算败,请问这个游戏小C是否能胜。 
Input一行表示数据组数Tcases(Tcases<=1,000)。 
后面Tcases行每行一个n(n<=1,000,000,000)。Output有Tcases行对于先手获胜输出“TAK”,先手狗带输出“NIE”。Sample Input

1
5

Sample Output

NIE
技术分享
/*
    最简单的做法就是找规律了,直接搜一下就能获得所有的胜负态。 
    仔细观察可以发现质数除了2和17就是败的,合数除了16,34和289都是赢的。 
    感觉这样是不太科学的,那就来讲讲道理。 
    我们发现2,4,8都是赢的,而16的后继状态都是赢的,所以它是败的,而2^n(n>4)都能转化到16。 
    同样的我们能说明17和2^n 17^m。 
    我们考虑一个合数,它的因数肯定有个败态的,它就必胜了。 
    这样也就说明了质数是必败了。
*/
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
int main(){
    int t,n;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        int temp=n;
        for(int i=2;i*i<=temp;i++)
            while(temp%i==0)temp/=i;
        if(temp==n){
            if(n==2||n==17)printf("TAK\n");
            else printf("NIE\n");
        }
        else{
            if(n==16||n==34||n==289)printf("NIE\n");
            else printf("TAK\n");
        }
    }
    return 0;
}
AC代码 打表找规律

 

以上是关于51nod 1831 小C的游戏的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1831 小C的游戏(博弈论+打表)

51nod_1831: 小C的游戏(Bash博弈 找规律)

51nod 1069 Nim游戏 + BZOJ 1022: [SHOI2008]小约翰的游戏John(Nim游戏和Anti-Nim游戏)

51nod-1661 1661 黑板上的游戏(组合游戏)

51nod_1417:天堂里的游戏

51nod 1824染色游戏