1046 Game 博弈论 结论题

 链接:https://ac.nowcoder.com/acm/contest/26656/1046
来源:牛客网

题目描述

Nancy喜欢博弈!
Johnson和Nancy得到了一个神奇的多重集合,仅包含一个正整数n,两个人轮流进行操作。
一次操作可以将集合中一个数字分解为它的任意两个非1的因数,并加入集合中。
他们想知道,在Johnson和Nancy绝顶聪明的情况下,如果Nancy先手进行操作,最后谁没有办法继续操作了呢?

输入描述:

第一行:一个整数n。
数据满足:1≤n≤957181 \leq n \leq 957181n95718。

输出描述:

共一行:一个字符串,表示最后谁(Johnson或者Nancy)无法进行操作。
示例1

输入

复制
4

输出

复制
Johnson

分析

如果质因数数量是 奇数,那N赢,否则J赢

//-------------------------代码----------------------------

//#define int ll
const int N = 2e6+10;
int n,m;

int cal(int n) {
    int sum = 0;
    if(n == 1 || n == 2) return 0;
    for(int i = 2;i<=n;i++) {
        if(n % i == 0) {
            while(n %i == 0) {
                n /= i;
                sum ++ ;
            }
        }
    }
    return sum - 1;
}

void solve()
{
    cin>>n;
    m = cal(n);
    if(m & 1) {
        cout<<"Johnson"<<endl;
    } else {
        cout<<"Nancy"<<endl;
    }
}

signed main(){
    clapping();TLE;

//    int t;cin>>t;while(t -- )
    solve();
//    {solve(); }
    return 0;
}

/*样例区


*/

//------------------------------------------------------------

 

posted @ 2022-07-30 01:10  er007  阅读(46)  评论(0编辑  收藏  举报