Divisor Game
EasyUpdated: Aug 2, 2025
Practice on:
Problem
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
xwith0 < x < nandn % x == 0. - Replacing the number
non the chalkboard withn - 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.
Examples
Example 1:
Input: n = 2
Output: true
Explanation: Alice chooses 1, and Bob has no more moves.
Example 2:
Input: n = 3
Output: false
Explanation: Alice chooses 1, Bob chooses 1, and Alice has no more moves.
Solution
Method 1 – Mathematical Parity
Intuition
If n is even, Alice can always win by making n odd for Bob. If n is odd, Bob will always win by making n even for Alice. This is because every move reduces n by an odd divisor, flipping the parity.
Approach
- If n is even, Alice wins.
- If n is odd, Bob wins.
- Return n % 2 == 0.
Code
C++
class Solution {
public:
bool divisorGame(int n) {
return n % 2 == 0;
}
};
Go
func divisorGame(n int) bool {
return n%2 == 0
}
Java
class Solution {
public boolean divisorGame(int n) {
return n % 2 == 0;
}
}
Kotlin
class Solution {
fun divisorGame(n: Int): Boolean {
return n % 2 == 0
}
}
Python
class Solution:
def divisorGame(self, n: int) -> bool:
return n % 2 == 0
Rust
impl Solution {
pub fn divisor_game(n: i32) -> bool {
n % 2 == 0
}
}
TypeScript
class Solution {
divisorGame(n: number): boolean {
return n % 2 === 0;
}
}
Complexity
- ⏰ Time complexity:
O(1)— Only a parity check. - 🧺 Space complexity:
O(1)— No extra space used.