洛谷P2092题解

题目链接: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;
}

猜你喜欢

转载自www.cnblogs.com/-YueYang-/p/12591208.html