Skip to content

Commit 870991a

Browse files
committed
variadic MathLib.gcd
1 parent 1746588 commit 870991a

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

Math/MathLib.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,27 @@ private static long[] inv_gcd(long a, long b){
2222
return new long[]{s,m0};
2323
}
2424

25-
public static long gcd(long a, long b){
26-
a = java.lang.Math.abs(a);
27-
b = java.lang.Math.abs(b);
28-
return inv_gcd(a, b)[0];
25+
public static long gcd(long... a){
26+
if(a.length == 0) return 0;
27+
long r = java.lang.Math.abs(a[0]);
28+
for(int i=1; i<a.length; i++){
29+
r = inv_gcd(r, java.lang.Math.abs(a[i]))[0];
30+
}
31+
return r;
2932
}
3033
public static long lcm(long a, long b){
3134
a = java.lang.Math.abs(a);
3235
b = java.lang.Math.abs(b);
3336
return a / gcd(a,b) * b;
3437
}
38+
public static long lcm(long... a){
39+
if(a.length == 0) return 0;
40+
long r = java.lang.Math.abs(a[0]);
41+
for(int i=1; i<a.length; i++){
42+
r = r / gcd(r,java.lang.Math.abs(a[i])) * java.lang.Math.abs(a[i]);
43+
}
44+
return r;
45+
}
3546

3647
public static long pow_mod(long x, long n, int m){
3748
assert n >= 0;

0 commit comments

Comments
 (0)