import java.lang.Exception; import java.io.IOException; import java.io.PrintStream; class RSA{ // Extended Euclid Alogorithm to compute Greatest Common Divisor public static long GCD(long x, long y) { long u = x, v = y, a = 1, b = 0, at = 0, bt = 1; while (v != 0) { long q = (u / v); long uTemp = u, vTemp = v, aTemp = a, bTemp = b, atTemp = at, btTemp = bt; u = vTemp; v = uTemp - q * vTemp; a = atTemp; b = btTemp; at = aTemp - atTemp * q; bt = bTemp - btTemp * q; } //return a; // if GCD(e, phi_n); return b; // if GCD(phi_n, e); } // end GCD public static void main (String args[]) throws java.lang.Exception { long p=0, q=0, e=0, d, n, phi_n; try { p = Long.parseLong(args[0]); q = Long.parseLong(args[1]); e = Long.parseLong(args[2]); } catch(ArrayIndexOutOfBoundsException aE) { System.out.println("Thrown to indicate that an array has been accessed with an illegal index." + aE.getMessage()); } n = p * q; phi_n = (p - 1) * (q - 1); d = GCD(phi_n, e); // if GCD returns a //d = GCD(e, phi_n); // if GCD returns b // 0 < d < n while( d < 0) { d += phi_n; } while( d > n) { d -= phi_n; } /* System.out.println("p = " + p); System.out.println("q = " + q); System.out.println("e = " + e); System.out.println("d = " + d); System.out.println("n = " + n); System.out.println("phi(n) = " + phi_n); */ System.out.println(n); System.out.println(e); System.out.println(d); } // end main }// end class RSA