Existem 'n' pontos em um plano, dos quais 'm' pontos são colineares. Encontre o número de triângulos formados pelos pontos como vértices?
Exemplos : 
 

Input :  n = 5, m = 4
Output : 6
Out of five points, four points are 
collinear, we can make 6 triangles. We
can choose any 2 points from 4 collinear
points and use the single point as 3rd
point. So total count is 4C2 = 6

Input :  n = 10, m = 4
Output : 116

Número de triângulos = n C 3 - m C 3
Como essa fórmula funciona?  
Considere o segundo exemplo acima. São 10 pontos, dos quais 4 colineares. Um triângulo será formado por quaisquer três desses dez pontos. Assim, formar um triângulo significa selecionar três dos 10 pontos. Três pontos podem ser selecionados entre os 10 pontos em n C 3 maneiras. 
Número de triângulos formados por 10 pontos quando nenhum 3 deles é colinear = 10 C 3 …… (i) 
Da mesma forma, o número de triângulos formados por 4 pontos quando nenhum 3 deles é colinear = 4 C 3 …… .. (ii)
Uma vez que o triângulo formado por esses 4 pontos não são válidos, o número necessário de triângulos formados = 10 C 3 - 4 C 3 = 120 - 4 = 116 

// CPP program to count number of triangles
// with n total points, out of which m are
// collinear.
#include <bits/stdc++.h>
using namespace std;
 
// Returns value of binomial coefficient
// Code taken from https://goo.gl/vhy4jp
int nCk(int n, int k)
{
    int C[k+1];
    memset(C, 0, sizeof(C));
 
    C[0] = 1;  // nC0 is 1
 
    for (int i = 1; i <= n; i++)
    {
        // Compute next row of pascal triangle
        // using the previous row
        for (int j = min(i, k); j > 0; j--)
            C[j] = C[j] + C[j-1];
    }
    return C[k];
}
 
/* function to calculate number of triangle
   can be formed */
int counTriangles(int n,int m)
{
    return (nCk(n, 3) - nCk(m, 3));
}
 
/* driver function*/
int main()
{
    int n = 5, m = 4;
    cout << counTriangles(n, m);
    return 0;
}
//Java program to count number of triangles
// with n total points, out of which m are
// collinear.
import java.io.*;
import java.util.*;
 
class GFG {
 
// Returns value of binomial coefficient
// Code taken from https://goo.gl/vhy4jp
static int nCk(int n, int k)
{
    int[] C=new int[k+1];
    for (int i=0;i<=k;i++)
    C[i]=0;
     
    C[0] = 1; // nC0 is 1
 
    for (int i = 1; i <= n; i++)
    {
        // Compute next row of pascal triangle
        // using the previous row
        for (int j = Math.min(i, k); j > 0; j--)
            C[j] = C[j] + C[j-1];
    }
    return C[k];
}
 
/* function to calculate number of triangle
can be formed */
static int counTriangles(int n,int m)
{
    return (nCk(n, 3) - nCk(m, 3));
}
 
    public static void main (String[] args) {
      int n = 5, m = 4;
      System.out.println(counTriangles(n, m));
 
    }
}
 
//This code is contributed by Gitanjali.
# python program to count number of triangles
# with n total points, out of which m are
# collinear.
import math
  
# Returns value of binomial coefficient
# Code taken from https://goo.gl / vhy4jp
def nCk(n, k):
    C = [0 for i in range(0, k + 2)]
  
    C[0] = 1; # nC0 is 1
    for i in range(0, n + 1):
      
        # Compute next row of pascal triangle
        # using the previous row
        for j in range(min(i, k), 0, -1):
            C[j] = C[j] + C[j-1]
      
    return C[k]
  
# function to calculate number of triangle
# can be formed
def counTriangles(n, m):
    return (nCk(n, 3) - nCk(m, 3))
  
# driver code
n = 5
m = 4
print (counTriangles(n, m))
  
# This code is contributed by Gitanjali
//C# program to count number of triangles
// with n total points, out of which m are
// collinear.
using System;
 
class GFG {
 
    // Returns value of binomial coefficient
    // Code taken from https://goo.gl/vhy4jp
    static int nCk(int n, int k)
    {
        int[] C=new int[k+1];
        for (int i = 0; i <= k; i++)
        C[i] = 0;
         
        // nC0 is 1
        C[0] = 1;
     
        for (int i = 1; i <= n; i++)
        {
            // Compute next row of pascal triangle
            // using the previous row
            for (int j = Math.Min(i, k); j > 0; j--)
                C[j] = C[j] + C[j - 1];
        }
        return C[k];
    }
     
    /* function to calculate number of triangle
    can be formed */
    static int counTriangles(int n,int m)
    {
        return (nCk(n, 3) - nCk(m, 3));
    }
     
    // Driver code
    public static void Main ()
    {
        int n = 5, m = 4;
        Console.WriteLine(counTriangles(n, m));
 
    }
}
 
// This code is contributed by vt_m.
<?php
// PHP program to count number
// of triangles with n total
// points, out of which m are collinear.
 
// Returns value of binomial coefficient
// Code taken from https://goo.gl/vhy4jp
function nCk($n, $k)
{
    for ($i = 0; $i <= $k; $i++)
    $C[$i] = 0;
 
    $C[0] = 1; // nC0 is 1
 
    for ($i = 1; $i <= $n; $i++)
    {
        // Compute next row of pascal
        // triangle using the previous row
        for ($j = min($i, $k); $j > 0; $j--)
            $C[$j] = $C[$j] + $C[$j - 1];
    }
    return $C[$k];
}
 
/* function to calculate number
of triangles that can be formed */
function counTriangles($n, $m)
{
    return (nCk($n, 3) - nCk($m, 3));
}
 
// Driver Code
$n = 5;
$m = 4;
echo counTriangles($n, $m);
return 0;
 
// This code is contributed by ChitraNayal
?>
<script>
    // Javascript program to count number of triangles
    // with n total points, out of which m are
    // collinear.
     
    // Returns value of binomial coefficient
    // Code taken from https://goo.gl/vhy4jp
    function nCk(n, k)
    {
        let C = new Array(k+1);
        C.fill(0);
 
        C[0] = 1;  // nC0 is 1
 
        for (let i = 1; i <= n; i++)
        {
            // Compute next row of pascal triangle
            // using the previous row
            for (let j = Math.min(i, k); j > 0; j--)
                C[j] = C[j] + C[j-1];
        }
        return C[k];
    }
 
    /* function to calculate number of triangle
       can be formed */
    function counTriangles(n, m)
    {
        return (nCk(n, 3) - nCk(m, 3));
    }
     
    let n = 5, m = 4;
    document.write(counTriangles(n, m));
     
    // This code is contributed by divyesh072019.
</script>

Saída : 
 

6