51nod 1831 小C的游戏

来源:互联网 发布:weex playground 源码 编辑:程序博客网 时间:2024/05/19 23:13

坑爹的题意。。。
每次可以对这个石子堆拿走一个或者把这个石子堆分成等量的几份并只取其中一份(不能不变或只剩下一个)。
【只取其中一份】,不是【去掉其中一份】。

题解是这样的,但我总觉得很玄学。。。

最简单的做法就是找规律了,直接搜一下就能获得所有的胜负态。
仔细观察可以发现质数除了2和17就是败的,合数除了16,34和289都是赢的。
感觉这样是不太科学的,那就来讲讲道理。
我们发现2,4,8都是赢的,而16的后继状态都是赢的,所以它是败的,而2^n(n>4)都能转化到16。
同样的我们能说明17和2^n17^m。
我们考虑一个合数,它的因数肯定有个败态的,它就必胜了。
这样也就说明了质数是必败了。

#include<bits/stdc++.h>using namespace std;int main(){int limit,n,T,i,flag;scanf("%d",&T);while(T--){scanf("%d",&n);flag=0;limit=sqrt(n);for(i=2;i<=limit;i++){if(n%i==0){flag=1;break;}}if(!flag){if(n==2||n==17)printf("TAK\n");elseprintf("NIE\n");}else{if(n==16||n==34||n==289)printf("NIE\n");elseprintf("TAK\n");}}}