59 lines
1.8 KiB
Java
59 lines
1.8 KiB
Java
|
/*
|
|||
|
Java Program to Implement Extended Euclid Algorithm
|
|||
|
This is a Java Program to Implement Extended Euclid Algorithm. The extended Euclidean algorithm is an extension to the Euclidean algorithm. Besides finding the greatest common divisor of integers a and b, as the Euclidean algorithm does, it also finds integers x and y (one of which is typically negative) that satisfy Bézout’s identity
|
|||
|
ax + by = gcd(a, b).
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
** Java Program to implement Extended Euclid Algorithm
|
|||
|
**/
|
|||
|
|
|||
|
import java.util.Scanner;
|
|||
|
|
|||
|
/** Class ExtendedEuclid **/
|
|||
|
public class ExtendedEuclid
|
|||
|
{
|
|||
|
/** Function to solve **/
|
|||
|
public void solve(long a, long b)
|
|||
|
{
|
|||
|
long x = 0, y = 1, lastx = 1, lasty = 0, temp;
|
|||
|
while (b != 0)
|
|||
|
{
|
|||
|
long q = a / b;
|
|||
|
long r = a % b;
|
|||
|
a = b;
|
|||
|
b = r;
|
|||
|
temp = x;
|
|||
|
x = lastx - q * x;
|
|||
|
lastx = temp;
|
|||
|
temp = y;
|
|||
|
y = lasty - q * y;
|
|||
|
lasty = temp;
|
|||
|
}
|
|||
|
System.out.println("Roots x : "+ lastx +" y :"+ lasty);
|
|||
|
}
|
|||
|
/** Main function **/
|
|||
|
public static void main (String[] args)
|
|||
|
{
|
|||
|
Scanner scan = new Scanner(System.in);
|
|||
|
System.out.println("Extended Euclid Algorithm Test\n");
|
|||
|
/** Make an object of ExtendedEuclid class **/
|
|||
|
ExtendedEuclid ee = new ExtendedEuclid();
|
|||
|
/** Accept two integers **/
|
|||
|
System.out.println("Enter a b of ax + by = gcd(a, b)\n");
|
|||
|
long a = scan.nextLong();
|
|||
|
long b = scan.nextLong();
|
|||
|
/** Call function solve of class ExtendedEuclid **/
|
|||
|
ee.solve(a, b);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
Enter a b of ax + by = gcd(a, b)
|
|||
|
|
|||
|
120 23
|
|||
|
Roots x : -9 y :47
|
|||
|
|
|||
|
|
|||
|
|