23 lines
644 B
Java
23 lines
644 B
Java
public final class ModularInverse {
|
|
|
|
public static void main(String[] aArgs) {
|
|
System.out.println(inverseModulus(42, 2017));
|
|
}
|
|
|
|
private static Egcd extendedGCD(int aOne, int aTwo) {
|
|
if ( aOne == 0 ) {
|
|
return new Egcd(aTwo, 0, 1);
|
|
}
|
|
Egcd value = extendedGCD(aTwo % aOne, aOne);
|
|
return new Egcd(value.aG, value.aY - ( aTwo / aOne ) * value.aX, value.aX);
|
|
}
|
|
|
|
private static int inverseModulus(int aNumber, int aModulus) {
|
|
Egcd value = extendedGCD(aNumber, aModulus);
|
|
return ( value.aG == 1 ) ? ( value.aX + aModulus ) % aModulus : 0;
|
|
}
|
|
|
|
private static record Egcd(int aG, int aX, int aY) {}
|
|
|
|
}
|