题目链接:https://www.luogu.com.cn/problem/P2092
分析题目,显然,这是一道博弈论题。
再看题目,获胜条件是当前的数是素数或是1,然后每次可以除以一个数(非1 or 本身,当然也要整除)。
仔细分析,只要留给对方一个只有两个质因数的数就能获胜,因为对方只能取一个质数,留给你一个质数,你就获胜了。
所以答案就是当前这个数的最小的两个质数的乘积。
再考虑特殊情况:
1.当前数是1:答案为0
2.当前数是质数,答案为0
3.当前数就是只有两个质因数,答案为2(第一行)。
#include<bits/stdc++.h> using namespace std; long long q; long long line[1005000],len; int main(){ cin>>q; if(q==1){ cout<<1<<endl<<0<<endl; return 0; } for(long long i=2;i*i<=q;++i){ if(q==1)break; while(q%i==0){line[++len]=i;q/=i;} } if(q!=1)line[++len]=q; if(len==1){ cout<<1<<endl<<0<<endl; return 0; } if(len==2){ cout<<2<<endl; return 0; } cout<<1<<endl<<line[1]*line[2]; return 0; }