题目大意:
给定一个集合,开始只有一个正整数,两个人每次操作从集合中取出一个数,将其分解为该数的两个非的因数,加入集合中,不断操作,问最后谁无法操作。
分析:
其实就是问该数可以分解成几个质数(= =,然而值得注意的是,复杂度的质因数分解最后需要判断余数是否为,如果不为则需要将这个余数纳入统计,如果是正常遍历的那种(复杂度)就不需要考虑这一点,对于本题来说,两种方法都可行。
#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 }