牛客算法週週練6---C-Game(C++)

 

時間限制: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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章