首先是题目链接

题目大意:

给定一个集合,开始只有一个正整数,两个人每次操作从集合中取出一个数,将其分解为该数的两个非的因数,加入集合中,不断操作,问最后谁无法操作。

 

分析:

其实就是问该数可以分解成几个质数(= =,然而值得注意的是,复杂度的质因数分解最后需要判断余数是否为,如果不为则需要将这个余数纳入统计,如果是正常遍历的那种(复杂度)就不需要考虑这一点,对于本题来说,两种方法都可行。

#include<bits/stdc++.h>
using namespace std;
constexpr int mod = 1e9 +7;
#pragma region 
inline long long read()
{
    char c = getchar();long long flag = 1, ans = 0;;
    while(c < '0' || c > '9'){if(c == '-')flag = -1; c = getchar();}
    while(c >= '0' && c <= '9'){ans = ans * 10 + c - '0'; c = getchar();}
    return (ans * flag);
}
#pragma endregion
// C'est la vie
int main() {
    int n = read(), ans = 0, tmp = n;
    for(int i = 2; i <= sqrt(n); ++ i) {
        while(tmp % i == 0) {
            tmp /= i;
            ans ++;
        }
    }
    if(tmp > 1) ans ++;
    if(ans % 2) cout << "Nancy" << endl;
    else cout << "Johnson" << endl;

    #ifndef ONLINE_JUDGE
    system("pause");
    #endif
}