【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;
}

猜你喜欢

转载自www.cnblogs.com/Vagrant-ac/p/12177066.html