# Determine the number of squares of unit area that a given line will pass through.

Given 2 endpoints (x1, y1) and (x2, y2) of a line, the task is to determine the number of squares of the unit area that line will pass through.

Examples:

Input: (x1 = 1, y1 = 1), (x2 = 4, y2 = 3)
Output: 4
In the diagram above the line is passing through 4 squares

Input: (x1 = 0, y1 = 0), (x2 = 2, y2 = 2)
Output: 2

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:
Let,

```Dx = (x2 - x1)
Dy = (y2 - y1)
```

Therefore,

```x = x1 + Dx * t
y = y1 + Dy * t
```

We have to find (x, y) for t in (0, 1].

For, x and y to be integral Dx and Dy must be divisible by t. Also, t cannot be irrational since Dx and Dy are integers.

Therefore let t = p / q.

Dx and Dy must be divisible by q. So GCD of Dx and Dy must be q.
Or, q = GCD(Dx, Dy).

There are only GCD(Dx, Dy) smallest subproblems.

Below is the implementation of the above approach:

## C++

 `#include ` `using` `namespace` `std; ` ` `  `// Function to return the required position ` `int` `noOfSquares(``int` `x1, ``int` `y1, ``int` `x2, ``int` `y2) ` `{ ` `    ``int` `dx = ``abs``(x2 - x1); ` `    ``int` `dy = ``abs``(y2 - y1); ` ` `  `    ``int` `ans = dx + dy - __gcd(dx, dy); ` ` `  `    ``cout<

## Java

 `// Java program to determine the numer  ` `// of squares that line will pass through ` `class` `GFG ` `{ ` `static` `int` `__gcd(``int` `a, ``int` `b)  ` `{  ` `    ``if` `(b == ``0``)  ` `        ``return` `a;  ` `    ``return` `__gcd(b, a % b);  ` `     `  `}  ` ` `  `// Function to return the required position ` `static` `void` `noOfSquares(``int` `x1, ``int` `y1,  ` `                        ``int` `x2, ``int` `y2) ` `{ ` `    ``int` `dx = Math.abs(x2 - x1); ` `    ``int` `dy = Math.abs(y2 - y1); ` ` `  `    ``int` `ans = dx + dy - __gcd(dx, dy); ` ` `  `    ``System.out.println(ans); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String []args) ` `{ ` `    ``int` `x1 = ``1``, y1 = ``1``, x2 = ``4``, y2 = ``3``; ` ` `  `    ``noOfSquares(x1, y1, x2, y2); ` `} ` `} ` ` `  `// This code contributed by Rajput-Ji `

## Python3

 `# Python3 program to determine the number  ` `# of squares that line will pass through  ` `from` `math ``import` `gcd ` ` `  `# Function to return the required position  ` `def` `noOfSquares(x1, y1, x2, y2) :  ` ` `  `    ``dx ``=` `abs``(x2 ``-` `x1);  ` `    ``dy ``=` `abs``(y2 ``-` `y1);  ` ` `  `    ``ans ``=` `dx ``+` `dy ``-` `gcd(dx, dy);  ` ` `  `    ``print``(ans);  ` ` `  `# Driver Code  ` `if` `__name__ ``=``=` `"__main__"` `:  ` ` `  `    ``x1 ``=` `1``; y1 ``=` `1``; x2 ``=` `4``; y2 ``=` `3``;  ` ` `  `    ``noOfSquares(x1, y1, x2, y2);  ` ` `  `# This code is contributed by Ryuga `

## C#

 `using` `System; ` ` `  `class` `GFG ` `{ ` `static` `int` `__gcd(``int` `a, ``int` `b)  ` `{  ` `    ``if` `(b == 0)  ` `        ``return` `a;  ` `    ``return` `__gcd(b, a % b);  ` `     `  `}  ` ` `  `// Function to return the required position ` `static` `void` `noOfSquares(``int` `x1, ``int` `y1,  ` `                        ``int` `x2, ``int` `y2) ` `{ ` `    ``int` `dx = Math.Abs(x2 - x1); ` `    ``int` `dy = Math.Abs(y2 - y1); ` ` `  `    ``int` `ans = dx + dy - __gcd(dx, dy); ` ` `  `    ``Console.WriteLine(ans); ` `} ` ` `  `// Driver Code ` `static` `void` `Main() ` `{ ` `    ``int` `x1 = 1, y1 = 1, x2 = 4, y2 = 3; ` ` `  `    ``noOfSquares(x1, y1, x2, y2); ` `} ` `} ` ` `  `// This code is contributed by mits `

## PHP

 ` `

Output:

```4
```

Time Complexity: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.