# 1025. Divisor Game

Alice and Bob take turns playing a game, with Alice starting first.

Initially, there is a number `N` on the chalkboard.  On each player’s turn, that player makes a  move  consisting of:

• Choosing any `x` with `0 < x < N` and `N % x == 0`.
• Replacing the number `N` on the chalkboard with `N - x`.

Also, if a player cannot make a move, they lose the game.

Return `True` if and only if Alice wins the game, assuming both players play optimally.

Example 1:

``````Input: 2
Output: true
Explanation: Alice chooses 1, and Bob has no more moves.
``````

Example 2:

``````Input: 3
Output: false
Explanation: Alice chooses 1, Bob chooses 1, and Alice has no more moves.
``````

Note:

1. `1 <= N <= 1000`

``````class Solution {
public:
bool divisorGame(int N) {
vector<bool> dp(N + 1);
for (int i = 2; i <= N; ++i) {
for (int j = 1; j < i; ++j) {
if (i % j != 0) continue;
if (!dp[i - j]) {
dp[i] = true;
break;
}
}
}
return dp[N];
}
};
``````

``````class Solution {
public:
bool divisorGame(int N) {
return N % 2 == 0;
}
};
``````

Github 同步地址:

https://github.com/grandyang/leetcode/issues/1025

https://leetcode.com/problems/divisor-game/

https://leetcode.com/problems/divisor-game/discuss/274608/Simple-DP-Java-Solution

https://leetcode.com/problems/divisor-game/discuss/296784/Come-on-in-different-explanation-from-others

LeetCode All in One 题目讲解汇总(持续更新中…)

 微信打赏 Venmo 打赏
（欢迎加入博主的知识星球，博主将及时答疑解惑，并分享刷题经验与总结，试运营期间前五十位可享受半价优惠～）

×

Help us with donation