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

• Difficulty Level : Expert
• Last Updated : 09 Jun, 2022

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:
In the diagram above the line is passing through 4 squares
Input: (x1 = 0, y1 = 0), (x2 = 2, y2 = 2)
Output:

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 number``// 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

 ``

## Javascript

 ``

Output:

`4`

Time Complexity: O(logn)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up