【Codeforces Round #107 (Div. 2)】Win or Freeze
C Win or Freeze
题意:一个博弈论,两个人轮流取数,当这个数还有除了1和本身的因子之外还有其余因子,可以取其中的任何一个因子。其他情况下取出数的本身。输出赢得人的 id ,如果是第一个人赢,输出1和第一次操作后剩余的数字,其他情况下输出2,。
题解:先将数进行素数分解,如果除1之外因子数等于2时,输出2。其他情况时输入1与除1之外的任意两个因子的乘积。
#include <cstdio>
#include <cmath>
#include <vector>
using namespace std;
typedef long long ll;
int main(){
ll N;
vector<ll>v;
scanf("%lld",&N);
v.clear();
ll k=sqrt(N);
for(ll i=2;i<=k;i++){
while(N%i==0){
v.push_back(i);
N/=i;
}
}
if(N==1);
else v.push_back(N);
if(v.size()==2){
printf("2\n");
}
else{
printf("1\n");
if(v.size()>2){
printf("%lld\n",v[0]*v[1]);
}
else printf("0\n");
}
return 0;
}