CF150A Win or Freeze

题目描述

你无法想象我们在 Nvodsk 的朋友们今年冬天有多冷!他们中的两个人玩了这样一个游戏来取暖:最开始一张纸上写着一个整数 $q$。每一轮,当前玩家需要写下一个整数,这个数必须是上一个数字的非平凡因数。然后他要绕酒店跑这么多圈。这里非平凡因数指的是,既不是 $1$ 也不是本身的约数。 第一个无法行动的人获胜,因为他能继续躺在温暖的被窝里,而另一个人还要继续跑圈。假设两个人都采取最优策略,判断哪位玩家获胜。如果先手获胜,输出一个可以获胜的首步操作。

输入格式

第一行给出一个整数 $q$,满足 $1 \leq q \leq 10^{13}$。 请不要使用 %lld 读入或输出 64 位整数,C++ 中建议使用 cin、cout 流或 %I64d。

输出格式

第一行输出最终获胜玩家的编号($1$ 或 $2$)。如果先手胜利,第二行输出他的一次合法且能胜利的首步操作(若先手无法行动,输出 $0$)。如果有多种解,输出任意一种。

说明/提示

数 $6$ 仅有两个非平凡因数:$2$ 和 $3$。当纸上写下了 $2$ 或 $3$ 时,已无法继续操作,因此它们为必胜数(无法再移动——也就是对方无法行动,则自己胜)。因此,$6$ 是失败数(写下 $6$ 所在的玩家将输)。对于 $30$,可以写下 $6$,这样下一轮对方面对必败局面,因此这是一次能够获胜的首步操作。 由 ChatGPT 5 翻译