Open In App

Program to find the value of tan(nΘ)

Given a value of tan(?) and a variable n <=15. The task is to find the value of tan(n?) using property of trigonometric functions.
Examples
 

Input: tan(?) = 0.3, n = 10
Output: -2.15283

Input: tan(?) = 0.3, n = 5
Output: 0.37293


 




The problem can be solved using De moivre’s theorem and Binomial theorem as described below:
Using De-Moivre’s theorem, we have

   


Below is the implementation of above approach: 
 

// C++ program to find the value
// of cos(n-theta)
 
#include <bits/stdc++.h>
#define ll long long int
#define MAX 16
using namespace std;
ll nCr[MAX][MAX] = { 0 };
 
// This function use to calculate the
// binomial coefficient upto 15
void binomial()
{
 
    // use simple DP to find coefficient
    for (int i = 0; i < MAX; i++) {
        for (int j = 0; j <= i; j++) {
            if (j == 0 || j == i)
                nCr[i][j] = 1;
            else
                nCr[i][j] = nCr[i - 1][j] + nCr[i - 1][j - 1];
        }
    }
}
 
// Function to find the value of
double findTanNTheta(double tanTheta, ll n)
{
    // store required answer
    double ans = 0, numerator = 0, denominator = 0;
 
    // use to toggle sign in sequence.
    ll toggle = 1;
 
    // calculate numerator
    for (int i = 1; i <= n; i += 2) {
        numerator = numerator + nCr[n][i] * pow(tanTheta, i) * toggle;
        toggle = toggle * -1;
    }
 
    // calculate denominator
    denominator = 1;
    toggle = -1;
 
    for (int i = 2; i <= n; i += 2) {
        numerator = numerator + nCr[n][i] * pow(tanTheta, i) * toggle;
        toggle = toggle * -1;
    }
 
    ans = numerator / denominator;
 
    return ans;
}
 
// Driver code.
int main()
{
    binomial();
    double tanTheta = 0.3;
 
    ll n = 10;
 
    cout << findTanNTheta(tanTheta, n) << endl;
    return 0;
}

                    
// Java program to find the value
// of cos(n-theta)
public class GFG {
     
    private static final int MAX = 16 ;
    static long nCr[][] = new long [MAX][MAX] ;
 
    // This function use to calculate the
    // binomial coefficient upto 15
    static void binomial()
    {
 
        // use simple DP to find coefficient
        for (int i = 0; i < MAX; i++) {
            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i)
                    nCr[i][j] = 1;
                else
                    nCr[i][j] = nCr[i - 1][j] + nCr[i - 1][j - 1];
            }
        }
    }
 
    // Function to find the value of
    static double findTanNTheta(double tanTheta, int n)
    {
        // store required answer
        double ans = 0, numerator = 0, denominator = 0;
     
        // use to toggle sign in sequence.
        long toggle = 1;
     
        // calculate numerator
        for (int i = 1; i <= n; i += 2) {
            numerator = numerator + nCr[n][i] * Math.pow(tanTheta, i) * toggle;
            toggle = toggle * -1;
        }
     
        // calculate denominator
        denominator = 1;
        toggle = -1;
     
        for (int i = 2; i <= n; i += 2) {
            numerator = numerator + nCr[n][i] * Math.pow(tanTheta, i) * toggle;
            toggle = toggle * -1;
        }
     
        ans = numerator / denominator;
     
        return ans;
    }
 
    // Driver code
    public static void main(String args[])
    {
        binomial();
        double tanTheta = 0.3;
        int n = 10;
        System.out.println(findTanNTheta(tanTheta, n));
    }
// This code is contributed by ANKITRAI1
}

                    
# Python3 program to find the value
# of cos(n-theta)
 
import math
MAX=16
nCr=[[0 for i in range(MAX)] for i in range(MAX)]
 
# Function to calculate the binomial
# coefficient upto 15
def binomial():
     
    # use simple DP to find coefficient
    for i in range(MAX):
        for j in range(0,i+1):
            if j == 0 or j == i:
                nCr[i][j] = 1
            else:
                nCr[i][j] = nCr[i - 1][j] + nCr[i - 1][j - 1]
 
# Function to find the value of cos(n-theta)
def findTanNTheta(tanTheta,n):
     
    # store required answer
    numerator=0
    denominator=1
     
    # to store required answer
    ans = 0
     
    # use to toggle sign in sequence.
    toggle = 1
 
    # calculate numerator
    for i in range(1,n+1,2):
        numerator = (numerator + nCr[n][i]*
                    (tanTheta**(i)) * toggle)
        toggle = toggle * -1
    # calculate denominator
    toggle=-1
    for i in range(2,n+1,2):
        numerator = (numerator + nCr[n][i]*
                    (tanTheta**i) * toggle)
        toggle = toggle * -1
    ans=numerator/denominator
    return ans
 
     
# Driver code
if __name__=='__main__':
    binomial()
    tanTheta = 0.3
    n = 10
    print(findTanNTheta(tanTheta, n))
     
# this code is contributed by sahilshelangia

                    
// C# program to find the value
// of cos(n-theta)
 
using System;
public class GFG {
      
    private static int MAX = 16 ;
    static long[,] nCr = new long [MAX,MAX] ;
  
    // This function use to calculate the
    // binomial coefficient upto 15
    static void binomial()
    {
  
        // use simple DP to find coefficient
        for (int i = 0; i < MAX; i++) {
            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i)
                    nCr[i,j] = 1;
                else
                    nCr[i,j] = nCr[i - 1,j] + nCr[i - 1,j - 1];
            }
        }
    }
  
    // Function to find the value of
    static double findTanNTheta(double tanTheta, int n)
    {
        // store required answer
        double ans = 0, numerator = 0, denominator = 0;
      
        // use to toggle sign in sequence.
        long toggle = 1;
      
        // calculate numerator
        for (int i = 1; i <= n; i += 2) {
            numerator = numerator + nCr[n,i] * Math.Pow(tanTheta, i) * toggle;
            toggle = toggle * -1;
        }
      
        // calculate denominator
        denominator = 1;
        toggle = -1;
      
        for (int i = 2; i <= n; i += 2) {
            numerator = numerator + nCr[n,i] * Math.Pow(tanTheta, i) * toggle;
            toggle = toggle * -1;
        }
      
        ans = numerator / denominator;
      
        return ans;
    }
  
    // Driver code
    public static void Main()
    {
        binomial();
        double tanTheta = 0.3;
        int n = 10;
        Console.Write(findTanNTheta(tanTheta, n));
    }
 
}

                    
<?php
// PHP program to find the value
// of cos(n-theta)
 
$MAX=16;
$nCr=array_fill(0, $MAX, array_fill(0, $MAX, 0));
 
// This function use to calculate the
// binomial coefficient upto 15
function binomial()
{
global $MAX,$nCr;
    // use simple DP to find coefficient
    for ($i = 0; $i < $MAX; $i++) {
        for ($j = 0; $j <= $i; $j++) {
            if ($j == 0 || $j == $i)
                $nCr[$i][$j] = 1;
            else
                $nCr[$i][$j] = $nCr[$i - 1][$j] + $nCr[$i - 1][$j - 1];
        }
    }
}
 
// Function to find the value of
function findTanNTheta($tanTheta, $n)
{
    global $MAX,$nCr;
    // store required answer
    $ans = 0;
    $numerator = 0;
    $denominator = 0;
 
    // use to toggle sign in sequence.
    $toggle = 1;
 
    // calculate numerator
    for ($i = 1; $i <= $n; $i += 2) {
        $numerator = $numerator + $nCr[$n][$i] * pow($tanTheta, $i) * $toggle;
        $toggle = $toggle * -1;
    }
 
    // calculate denominator
    $denominator = 1;
    $toggle = -1;
 
    for ($i = 2; $i <= $n; $i += 2) {
        $numerator = $numerator + $nCr[$n][$i] * pow($tanTheta, $i) * $toggle;
        $toggle = $toggle * -1;
    }
 
    $ans = $numerator / $denominator;
 
    return $ans;
}
 
// Driver code.
 
    binomial();
    $tanTheta = 0.3;
 
    $n = 10;
 
    echo findTanNTheta($tanTheta, $n);
     
// This code is contributed by mits
?>

                    
<script>
 
// Javascript program to find the value
// of cos(n-theta)
 
MAX = 16
var nCr = Array.from(Array(MAX), ()=> new Array(MAX));
 
// This function use to calculate the
// binomial coefficient upto 15
function binomial()
{
 
    // use simple DP to find coefficient
    for (var i = 0; i < MAX; i++) {
        for (var j = 0; j <= i; j++) {
            if (j == 0 || j == i)
                nCr[i][j] = 1;
            else
                nCr[i][j] = nCr[i - 1][j] +
                nCr[i - 1][j - 1];
        }
    }
}
 
// Function to find the value of
function findTanNTheta(tanTheta, n)
{
    // store required answer
    ans = 0, numerator = 0, denominator = 0;
 
    // use to toggle sign in sequence.
    toggle = 1;
 
    // calculate numerator
    for (var i = 1; i <= n; i += 2) {
        numerator = numerator + nCr[n][i] *
        Math.pow(tanTheta, i) * toggle;
        toggle = toggle * -1;
    }
 
    // calculate denominator
    denominator = 1;
    toggle = -1;
 
    for (var i = 2; i <= n; i += 2) {
        numerator = numerator + nCr[n][i] *
        Math.pow(tanTheta, i) * toggle;
        toggle = toggle * -1;
    }
 
    ans = numerator / denominator;
 
    return ans.toFixed(5);
}
 
// Driver code.
binomial();
var tanTheta = 0.3;
var n = 10;
document.write( findTanNTheta(tanTheta, n));
 
</script>

                    

Output: 
-2.15283

 

Time Complexity: O(n + MAX2)

Auxiliary Space: O(MAX2)


Article Tags :