Write a program Divisors.java to compute the greatest common divisor and related functions on integers:
To do so, organize your program according to the following public API:
public class Divisors {
// Returns the greatest common divisor of a and b.
public static int gcd(int a, int b)
// Returns the least common multiple of a and b.
public static int lcm(int a, int b)
// Returns true if a and b are relatively prime; false otherwise.
public static boolean areRelativelyPrime(int a, int b)
// Returns the number of integers between 1 and n that are
// relatively prime with n.
public static int totient(int n)
// Takes two integer command-line arguments a and b and prints
// each function, evaluated in the format (and order) given below.
public static void main(String[] args)
}
Here are some sample executions:
~/Desktop/functions> java Divisors 1440 408
gcd(1440, 408) = 24
lcm(1440, 408) = 24480
areRelativelyPrime(1440, 408) = false
totient(1440) = 384
totient(408) = 128
~/Desktop/functions> java Divisors 987 610
gcd(987, 610) = 1
lcm(987, 610) = 602070
areRelativelyPrime(987, 610) = true
totient(987) = 552
totient(610) = 240
Use the following algorithms to implement the corresponding functions.
Least common multiple. Use the following formula, which relates the gcd and lcm functions: lcm(a, b) = (abs(a) * abs(b)) / gcd(a, b) To avoid preventable arithmetic overflow, perform the division before the multiplication. Recall that lcm(0, 0) = 0.
The greatest common divisor and least common multiple functions arise in a variety of applications, including reducing fractions, modular arithmetic, and cryptography. Euler’s totient function plays an important role in number theory, including Euler’s theorem and cyclotomic polynomials.
public class Divisors {
// Returns the greatest common divisor of a and b.
public static int gcd(int a, int b) {
a = Math.abs(a);
b = Math.abs(b);
while (b != 0) {
int mod = a % b;
a = b;
b = mod;
}
return a;
}
// Returns the least common multiple of a and b.
public static int lcm(int a, int b) {
if ((a == 0) && (b == 0)) {
return 0;
}
return Math.abs(a) * (Math.abs(b) / gcd(a, b));
}
// Returns true if a and b are relatively prime; false otherwise.
public static boolean areRelativelyPrime(int a, int b) {
return gcd(a, b) == 1;
}
// Returns the number of integers between 1 and n that are
// relatively prime with n.
public static int totient(int n) {
int count = 0;
for (int i = 0; i < n; i++) {
if (areRelativelyPrime(i, n)) {
count++;
}
}
return count;
}
public static void main(String[] args) {
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
StdOut.println("gcd(" + a + "," + b + ") = " + gcd(a, b));
StdOut.println("lcm(" + a + "," + b + ") = " + lcm(a, b));
StdOut.println("areRelativelyPrime(" + a + "," + b + ") = " + areRelativelyPrime(a, b));
StdOut.println("totient(" + a + ") = " + totient(a));
StdOut.println("totient(" + b + ") = " + totient(b));
}
}
Link To: Java Source Code