题目背景

\(Roy\)\(October\)两人在玩一个取石子的游戏。

题目描述

游戏规则是这样的:共有\(n\)个石子,两人每次都只能取\(p^k\)个(\(p\)为质数,\(k\)为自然数,且\(p^k\)小于等于当前剩余石子数),谁取走最后一个石子,谁就赢了。

现在\(October\)先取,问她有没有必胜策略。

若她有必胜策略,输出一行"\(October wins!\)";否则输出一行"\(Roy wins!\)"。

输入输出格式

输入格式:

第一行一个正整数T,表示测试点组数。

\(2\)行~第\((T+1)\)行,一行一个正整数\(n\),表示石子个数。

输出格式:

\(T\)行,每行分别为"\(October wins!\)"或"\(Roy wins!\)"。

输入输出样例

输入样例#1:

3
4
9
14

输出样例#1:

October wins!
October wins!
October wins!

说明

对于\(30\%\)的数据,\(1<=n<=30\)

对于\(60\%\)的数据,\(1<=n<=1,000,000\)

对于\(100\%\)的数据,\(1<=n<=50,000,000,1<=T<=100,000\)

(改编题)

思路:被洛谷标签给骗了,不知道为什么这道题的标签是\(prim\),本来是想练最小生成树,看数据范围,根本不可做,而且……也没法建边啊,洛谷标签真的是……不过点进来了,就做做吧,发现这其实就是个打表题,如果输入的\(n\)\(6\)值为\(0\),就是先手必败态,否则为先手必胜态。

代码:

#include<cstdio>
using namespace std;
int t,n;
int main() {
  scanf("%d",&t);
  while(t--) {
    scanf("%d",&n);
    if(n%6) printf("October wins!\n");
    else printf("Roy wins!\n");
  }
  return 0;
}