题意:现在你有一个原始数n ,小公举和corn 两个人轮流取一个数a.a为n的因子(a不与1或n相等),然后令a为新的原始数n。当某名玩家不能从n中取数时,该名玩家获胜。当小公举获胜时输出1 ,为了防止小公举瞎猜的莽夫体质,还要输出小公举第一次取得数是什么。假如corn获胜直接输出2即可。

题解:显然我们只要在找到n的两个质因数a,b然后取最小的两个质因数a,b得到a*b就一定能赢。思路不难想,重点是实现的时候,我刚开始用素数筛去寻找质因数再第九个样例RE了,后来参考大佬的代码才知道数论里面有求解质因数的模板,啧啧啧,自己还是会的太少了,继续加油吧。

AC代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <cstring>
#include <algorithm>
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
main() {
int n;
vector<int>ans;
cin>>n;
int x=n;
for(int i=2; i*i<=n; i++) {//求解n的质因数
while(n%i==0) {
ans.push_back(i);
n/=i;
}
}
if(x!=n&&n!=1)ans.push_back(n);
if(ans.size()>2)cout<<1<<endl<<ans[0]*ans[1]<<endl;
else if(ans.size()==2)cout<<2<<endl;
else cout<<1<<endl<<0<<endl;
}