# 1025. Divisor Game | LeetCode Solution

## 1025. Divisor Game | LeetCode Solution

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: 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.
```

Constraints:

• `1 <= n <= 1000`
class Solution {
public:
int dp;
int helper(int n){
if(dp[n]!=-1)return dp[n];
else{

for(int i=1; i<n; i++){
if(n%i==0){
if(dp[n-i]==-1)
dp[n-i]=helper(n-1);
if(dp[n-i]==0)return 1;
}
}
return 0;

}
}

bool divisorGame(int n) {
memset(dp,-1,sizeof dp);
return helper(n);
}
};

class Solution {
public:
int dp;
int helper(int n){
if(n==1)return 0;
if(dp[n]!=-1)return dp[n];
else{

for(int i=1; i*i<=n; i++){
if(n%i==0){
if(helper(n-i)==0)return dp[n]=1;
if((i!=1) && helper(n-(n/i)==0))return dp[n]=1;
}
}

}
return dp[n]=0;
}

bool divisorGame(int n) {
memset(dp,-1,sizeof dp);
return helper(n);
}
};

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