時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
Nancy喜歡博弈!
Johnson和Nancy得到了一個神奇的多重集合,僅包含一個正整數n,兩個人輪流進行操作。
一次操作可以將集合中一個數字分解爲它的任意兩個非1的因數,並加入集合中。
他們想知道,在Johnson和Nancy絕頂聰明的情況下,如果Nancy先手進行操作,最後誰沒有辦法繼續操作了呢?
輸入描述:
第一行:一個整數n。 數據滿足:1≤n≤95718
輸出描述:
共一行:一個字符串,表示最後誰(Johnson或者Nancy)無法進行操作。
示例1
輸入
4
輸出
Johnson
因爲每一次操作都會使集合中多出一個數,且每次操作後會產生質因數,因爲質因數是無法繼續分解成兩個因數。
其實只需要看結果即可,如果集合中的質因數的個數是奇數(當n=1爲例外),就說明是Nancy無法再操作了;如果集合中的質因數的個數是偶數,就說明是Johnson無法再操作了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
using namespace std;
int main()
{
int n, ans=0;
cin>>n;
if(n==1) {
cout<<"Nancy"<<endl;
return 0;
}
for(int i=2;i<=n;i++) //分解以得到質因數的個數
{
while(n%i==0) {
n/=i;
ans++;
}
}
if(ans%2==0)
cout<<"Johnson"<<endl;
else
cout<<"Nancy"<<endl;
return 0;
}