码迷,mamicode.com
首页 > 其他好文 > 详细

51nod 1831 小C的游戏

时间:2017-09-17 19:08:01      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:div   大小   规律   close   src   来讲   code   k&r   str   

小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的游戏

标签:div   大小   规律   close   src   来讲   code   k&r   str   

原文地址:http://www.cnblogs.com/thmyl/p/7536447.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!