题意:给你一个数n,你先手,你写出一个n的独特因数(不包括n和1),然后让对手再对你写的数进行操作,若一个人无法找出这个数的独特因数,这个人就赢了;
这个博弈都是3回合解决的,首先一回合赢的,当n是1或者是质数时,先手的我必赢;然后两回合赢的,当n只能分解成2个质数的乘积时,对手必赢;三回合赢的,将n唯一分解,然后我写一个因数使只留下两个质数的乘积给对手,我必赢
#include <cstdio>
using namespace std;
typedef long long ll;
ll n;
bool is_prime(ll x){
for(ll i = 2;i*i <= x;i++){
if(x%i==0) return 0;
}
return 1;
}
const int N = 2e5+10;
int cnt = 0;
ll primes[N];
void f(ll x){
for(ll i = 2;i <= x/i;i++){
if(x%i==0){
while(x%i==0) x/=i,primes[++cnt] = i;
}
}
if(x > 1) primes[++cnt] = x;
}
int main(){
scanf("%lld",&n);
if(n==1||is_prime(n)){
puts("1");
puts("0");
}else{
f(n);
if(cnt == 2) puts("2");
else{
puts("1");
printf("%lld\n",primes[1]*primes[2]);
}
}
}