import
java.util.*;
public
class
GFG {
public
static
void
maxZeroes(List<Integer> A, List<Integer> B) {
Map<Pair<Integer, Integer>, Integer> mp =
new
HashMap<>();
int
N = A.size();
int
ans =
0
;
int
cnt =
0
;
for
(
int
i =
0
; i < N; i++) {
int
num = -B.get(i);
int
den = A.get(i);
int
gc = gcd(num, den);
if
(den !=
0
) {
num /= gc;
den /= gc;
}
if
(num <=
0
) {
num *= -
1
;
den *= -
1
;
}
if
(den ==
0
&& num ==
0
)
cnt++;
if
(den !=
0
) {
Pair<Integer, Integer> currentPair = Pair.of(num, den);
if
(currentPair !=
null
){
mp.put(currentPair, mp.getOrDefault(currentPair,
0
) +
1
);
}
if
(mp.containsKey(currentPair)){
ans = Math.max(mp.get(currentPair), ans);
}
}
}
System.out.println(ans + cnt);
}
public
static
int
gcd(
int
a,
int
b) {
if
(b ==
0
)
return
a;
return
gcd(b, a % b);
}
public
static
void
main(String[] args) {
List<Integer> A = Arrays.asList(
1
,
2
,-
1
);
List<Integer> B = Arrays.asList(-
6
,-
12
,
6
);
maxZeroes(A, B);
}
}
class
Pair<T, U> {
T first;
U second;
public
Pair(T first, U second) {
this
.first = first;
this
.second = second;
}
public
T getFirst() {
return
first;
}
public
U getSecond() {
return
second;
}
public
static
<T, U> Pair<T, U> of(T first, U second) {
return
new
Pair<T, U>(first, second);
}
@Override
public
boolean
equals(Object o) {
if
(
this
== o)
return
true
;
if
(o ==
null
|| getClass() != o.getClass())
return
false
;
Pair<?, ?> pair = (Pair<?, ?>) o;
return
Objects.equals(first, pair.first) &&
Objects.equals(second, pair.second);
}
@Override
public
int
hashCode() {
return
Objects.hash(first, second);
}
}