Two positive integers N and M are given. Integer N represents the number of chocolates arranged in a circle, numbered from 0 to N − 1.
You start to eat the chocolates. After eating a chocolate you leave only a wrapper.
You begin with eating chocolate number 0. Then you omit the next M − 1 chocolates or wrappers on the circle, and eat the following one.
More precisely, if you ate chocolate number X, then you will next eat the chocolate with number (X + M) modulo N (remainder of division).
You stop eating when you encounter an empty wrapper.
For example, given integers N = 10 and M = 4. You will eat the following chocolates: 0, 4, 8, 2, 6.
The goal is to count the number of chocolates that you will eat, following the above rules.
Write a function:
class Solution { public int solution(int N, int M); }
that, given two positive integers N and M, returns the number of chocolates that you will eat.
For example, given integers N = 10 and M = 4. the function should return 5, as explained above.
Write an efficient algorithm for the following assumptions:
- N and M are integers within the range [1..1,000,000,000].
// you can also use imports, for example:
import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(int N, int M) {
boolean[] chkMap = new boolean[N];
int eatIndex = M-1;
int answer = 0;
while(true) {
if (chkMap[eatIndex]) break;
chkMap[eatIndex] = true;
eatIndex += M;
answer++;
if (eatIndex >= N) {
eatIndex %= N;
}
}
return answer;
}
}
// you can also use imports, for example:
import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(int N, int M) {
boolean[] chkMap = new boolean[N];
int eatIndex = M-1;
int answer = 0;
while(true) {
if (chkMap[eatIndex]) break;
chkMap[eatIndex] = true;
eatIndex += M;
answer++;
if (eatIndex >= N) {
eatIndex %= N;
}
}
return answer;
}
}
// you can also use imports, for example:
import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(int N, int M) {
boolean[] chkMap = new boolean[N];
int eatIndex = M-1;
int answer = 0;
while(true) {
if (chkMap[eatIndex]) break;
chkMap[eatIndex] = true;
eatIndex += M;
answer++;
if (eatIndex >= N) {
eatIndex %= N;
}
}
return answer;
}
}
The following issues have been detected: runtime errors.
For example, for the input (1, 2) the solution terminated unexpectedly.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at Solution.solution(Solution.java:13) at Exec.run(exec.java:47) at Exec.main(exec.java:32)
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20 at Solution.solution(Solution.java:13) at Exec.run(exec.java:47) at Exec.main(exec.java:32)
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 320 at Solution.solution(Solution.java:13) at Exec.run(exec.java:47) at Exec.main(exec.java:32)
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at Solution.solution(Solution.java:9) at Exec.run(exec.java:47) at Exec.main(exec.java:32)
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at Solution.solution(Solution.java:9) at Exec.run(exec.java:47) at Exec.main(exec.java:32)
N = (3**9)*(2**14), M=(2**14)*(2**14)
tested program terminated with exit code 1
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at Solution.solution(Solution.java:9) at Exec.run(exec.java:47) at Exec.main(exec.java:32)
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at Solution.solution(Solution.java:9) at Exec.run(exec.java:47) at Exec.main(exec.java:32)
maximal and minimal values
tested program terminated with exit code 1
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at Solution.solution(Solution.java:9) at Exec.run(exec.java:47) at Exec.main(exec.java:32)
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 999999999 at Solution.solution(Solution.java:13) at Exec.run(exec.java:47) at Exec.main(exec.java:32)
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at Solution.solution(Solution.java:9) at Exec.run(exec.java:47) at Exec.main(exec.java:32)