 Open in App
Not now

# 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
Related Articles