aboutsummaryrefslogtreecommitdiff
path: root/challenge-136/abigail/java/ch-1.java
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-10-26 18:18:25 +0200
committerAbigail <abigail@abigail.be>2021-10-26 18:18:25 +0200
commit4894bf4150e87a883dcc94d1172df4feb4c5e45b (patch)
treecd72172025e898ab50d0a91ce6ff90969c083989 /challenge-136/abigail/java/ch-1.java
parent6f22a777308b07dcd433baf9ce525ba9dd95eedb (diff)
downloadperlweeklychallenge-club-4894bf4150e87a883dcc94d1172df4feb4c5e45b.tar.gz
perlweeklychallenge-club-4894bf4150e87a883dcc94d1172df4feb4c5e45b.tar.bz2
perlweeklychallenge-club-4894bf4150e87a883dcc94d1172df4feb4c5e45b.zip
Java solutions for week 136
Diffstat (limited to 'challenge-136/abigail/java/ch-1.java')
-rw-r--r--challenge-136/abigail/java/ch-1.java55
1 files changed, 55 insertions, 0 deletions
diff --git a/challenge-136/abigail/java/ch-1.java b/challenge-136/abigail/java/ch-1.java
new file mode 100644
index 0000000000..4fbc1db180
--- /dev/null
+++ b/challenge-136/abigail/java/ch-1.java
@@ -0,0 +1,55 @@
+//
+// See ../README.md
+//
+
+//
+// Run as: ln ch-1.java ch1.java; javac ch1.java; java ch1 < input-file
+//
+
+import java.util.*;
+
+public class ch1 {
+ //
+ // Find the GCD, using Stein's algorithm
+ // (https://en.wikipedia.org/wiki/Binary_GCD_algorithm)
+ //
+ public static int gcd (int u, int v) {
+ boolean u_odd = u % 2 != 0;
+ boolean v_odd = v % 2 != 0;
+
+ return u == v || v == 0 ? u
+ : u == 0 ? v
+ : !u_odd && !v_odd ? gcd (u >> 1, v >> 1) << 1
+ : !u_odd && v_odd ? gcd (u >> 1, v)
+ : u_odd && !v_odd ? gcd (u, v >> 1)
+ : u > v ? gcd (u - v, v)
+ : gcd (v - u, u);
+ }
+
+ //
+ // Return true if number is a power of n, that is, number == n ^ p
+ // for some non-negative integer p. Return false otherwise.
+ //
+ public static boolean is_power_of_n (int number, int n) {
+ return number < 1 ? false
+ : number == 1 ? true
+ : number % n != 0 ? false
+ : is_power_of_n (number / n, n);
+ }
+
+ public static boolean is_power_of_2 (int number) {
+ return is_power_of_n (number, 2);
+ }
+
+ public static void main (String [] args) {
+ Scanner scanner = new Scanner (System . in);
+ while (scanner . hasNextInt ()) {
+ int n = scanner . nextInt ();
+ int m = scanner . nextInt ();
+
+ int r = gcd (n, m);
+
+ System . out . println (r > 1 && is_power_of_2 (r) ? 1 : 0);
+ }
+ }
+}