1046 Game 博弈论 结论题
链接:https://ac.nowcoder.com/acm/contest/26656/1046
来源:牛客网
题目描述
Nancy喜欢博弈!
Johnson和Nancy得到了一个神奇的多重集合,仅包含一个正整数n,两个人轮流进行操作。
一次操作可以将集合中一个数字分解为它的任意两个非1的因数,并加入集合中。
他们想知道,在Johnson和Nancy绝顶聪明的情况下,如果Nancy先手进行操作,最后谁没有办法继续操作了呢?
Johnson和Nancy得到了一个神奇的多重集合,仅包含一个正整数n,两个人轮流进行操作。
一次操作可以将集合中一个数字分解为它的任意两个非1的因数,并加入集合中。
他们想知道,在Johnson和Nancy绝顶聪明的情况下,如果Nancy先手进行操作,最后谁没有办法继续操作了呢?
输入描述:
第一行:一个整数n。
数据满足:1≤n≤957181 \leq n \leq 957181≤n≤95718。
输出描述:
共一行:一个字符串,表示最后谁(Johnson或者Nancy)无法进行操作。
分析
如果质因数数量是 奇数,那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; } /*样例区 */ //------------------------------------------------------------