Q 素因子分解为 p1 * p2 * … * pk ,并且 p1 <= p2 <= … <= pk
1、素因子个数 k >= 3 或者 k == 1 , K必胜
2、素因子个数k == 2 , C必胜
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
const int MaxN = 3400000;
bool v[MaxN];
int prime[MaxN], prime_cnt;
void init_primes(int n)
{
for(int i = 2; i <= n; ++i)
{
if(v[i])
continue;
prime[++prime_cnt] = i;
for(int j = i; j <= n / i; ++j)
{
v[i * j] = 1;
}
}
}
int main()
{
init_primes(MaxN);
int p[100], p_cnt = 0;
long long n, mark_n;
scanf("%lld", &n);
mark_n = n;
for(int i = 1; i <= prime_cnt && prime[i] <= mark_n; ++i)
{
if(n % prime[i] == 0)
{
while(n % prime[i] == 0)
{
p[++p_cnt] = prime[i];
n /= prime[i];
}
}
}
if(n > 1)
p[++p_cnt] = n;
if(p_cnt == 1)
{
printf("1\n0\n");
}else{
if(p_cnt >= 3)
{
printf("1\n");
long long a = p[1], b = p[2];
printf("%lld\n", a * b);
}else{
printf("2\n");
}
}
return 0;
}
/*
6
*/
/*
2
*/
/*
30
*/
/*
1
6
*/