Given two integers **X** and **Y**, the task is to find the maximum number of points of intersection possible among **X** circles and **Y** straight lines.

**Example:**

Input:X = 4, Y = 4

Output:50

Explanation:

4 lines intersect each other at 6 points and 4 circles intersect each other at maximum of 12 points.

Each line intersects 4 circles at 8 points.

Hence, 4 lines intersect four circles at a maximum of 32 points.

Thus, required number of intersections = 6 + 12 + 32 = 50.

Input:X = 3, Y = 4

Output:36

**Approach:**

It can be observed that there are three types of intersections:

- The number of ways to choose a pair of points from X circles is . Each such pair intersect at most two points.
- The number of ways to choose a pair of points from Y lines is . Each such pair intersect in at most one point.
- The number of ways to choose one circle and one line from X circles and Y lines is is . Each such pair intersect in at most two points.

So, the maximum number of point of intersection can be calculated as:

=>

=>

Thus, formula to find maximum number of point of intersection of **X** circles and **Y** straight lines is:

Below is the implementation of the above approach:

## C++

`// C++ Program of the above approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `int` `maxPointOfIntersection(` `int` `x, ` `int` `y) ` `{ ` ` ` `int` `k = y * (y - 1) / 2; ` ` ` `k = k + x * (2 * y + x - 1); ` ` ` `return` `k; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` ` ` `// Number of circles ` ` ` `int` `x = 3; ` ` ` ` ` `// Number of straight lines ` ` ` `int` `y = 4; ` ` ` ` ` `// Function Call ` ` ` `cout << (maxPointOfIntersection(x, y)); ` `} ` ` ` `// This code is contributed by Ritik Bansal ` |

*chevron_right*

*filter_none*

## Java

`// Java program to implement ` `// the above approach ` `class` `GFG{ ` ` ` `static` `int` `maxPointOfIntersection(` `int` `x, ` `int` `y) ` `{ ` ` ` `int` `k = y * (y - ` `1` `) / ` `2` `; ` ` ` `k = k + x * (` `2` `* y + x - ` `1` `); ` ` ` `return` `k; ` `} ` ` ` `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` ` ` ` ` `// Number of circles ` ` ` `int` `x = ` `3` `; ` ` ` ` ` `// Number of straight lines ` ` ` `int` `y = ` `4` `; ` ` ` ` ` `// Function Call ` ` ` `System.out.print(maxPointOfIntersection(x, y)); ` `} ` `} ` ` ` `// This code is contributed by Princi Singh ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to implement ` `# the above approach ` `def` `maxPointOfIntersection(x, y): ` ` ` `k ` `=` `y ` `*` `( y ` `-` `1` `) ` `/` `/` `2` ` ` `k ` `=` `k ` `+` `x ` `*` `( ` `2` `*` `y ` `+` `x ` `-` `1` `) ` ` ` `return` `k ` ` ` `# Number of circles ` `x ` `=` `3` `# Number of straight lines ` `y ` `=` `4` ` ` `# Function Call ` `print` `(maxPointOfIntersection(x, y)) ` |

*chevron_right*

*filter_none*

## C#

`// C# program to implement ` `// the above approach ` `using` `System; ` ` ` `class` `GFG{ ` ` ` `static` `int` `maxPointOfIntersection(` `int` `x, ` `int` `y) ` `{ ` ` ` `int` `k = y * (y - 1) / 2; ` ` ` `k = k + x * (2 * y + x - 1); ` ` ` `return` `k; ` `} ` ` ` `// Driver code ` `public` `static` `void` `Main(String[] args) ` `{ ` ` ` ` ` `// Number of circles ` ` ` `int` `x = 3; ` ` ` ` ` `// Number of straight lines ` ` ` `int` `y = 4; ` ` ` ` ` `// Function Call ` ` ` `Console.Write(maxPointOfIntersection(x, y)); ` `} ` `} ` ` ` `// This code is contributed by Princi Singh ` |

*chevron_right*

*filter_none*

**Output:**

36

**Time Complexity:** *O(1)*

**Auxiliary Space:** *O(1)*