Given a value of cos(?) and a variable . The task is to find the value of cos(n?) using property of trigonometric functions.
Note: n <= 15.
Examples:
Input : cos(?) = 0.5, n = 10 Output : -0.5 Input :cos(?) = 0.5, n = 3 Output : -0.995523
The problem can be solved using De moivre’s theorem and Binomial theorem as described below:
Using De-Moivre’s theorem, we have:
Now, as the value of both sin(?) and cos(?) is known. Put the values in above equation to get the answer.
Below is the implementation of the above idea:
C++
// CPP program to find the value of cos(n-theta) #include <bits/stdc++.h> #define MAX 16 using namespace std; int nCr[MAX][MAX] = { 0 }; // Function 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 cos(n-theta) double findCosnTheta( double cosTheta, int n) { // find sinTheta from cosTheta double sinTheta = sqrt (1 - cosTheta * cosTheta); // to store required answer double ans = 0; // use to toggle sign in sequence. int toggle = 1; for ( int i = 0; i <= n; i += 2) { ans = ans + nCr[n][i] * pow (cosTheta, n - i) * pow (sinTheta, i) * toggle; toggle = toggle * -1; } return ans; } // Driver code int main() { binomial(); double cosTheta = 0.5; int n = 10; cout << findCosnTheta(cosTheta, n) << endl; return 0; } |
Java
// Java program to find the value of cos(n-theta) class GFG { static int MAX= 16 ; static int [][] nCr= new int [MAX][MAX]; // Function 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 cos(n-theta) static double findCosnTheta( double cosTheta, int n) { // find sinTheta from cosTheta double sinTheta = Math.sqrt( 1 - cosTheta * cosTheta); // to store required answer double ans = 0 ; // use to toggle sign in sequence. int toggle = 1 ; for ( int i = 0 ; i <= n; i += 2 ) { ans = ans + nCr[n][i] * Math.pow(cosTheta, n - i) * Math.pow(sinTheta, i) * toggle; toggle = toggle * - 1 ; } return ans; } // Driver code public static void main(String[] args) { binomial(); double cosTheta = 0.5 ; int n = 10 ; System.out.println(String.format( "%.5f" ,findCosnTheta(cosTheta, n))); } } // This code is contributed by mits |
Python3
# 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 findCosnTheta(cosTheta,n): # find sinTheta from cosTheta sinTheta = math.sqrt( 1 - cosTheta * cosTheta) # to store the required answer ans = 0 # use to toggle sign in sequence. toggle = 1 for i in range ( 0 ,n + 1 , 2 ): ans = ans + nCr[n][i] * (cosTheta * * (n - i)) * (sinTheta * * i) * toggle toggle = toggle * - 1 return ans # Driver code if __name__ = = '__main__' : binomial() cosTheta = 0.5 n = 10 print (findCosnTheta(cosTheta, n)) # this code is contributed by sahilshelangia |
C#
// C# program to find the value of cos(n-theta) using System; public class GFG{ static int MAX=16; static int [,]nCr= new int [MAX,MAX]; // Function 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 cos(n-theta) static double findCosnTheta( double cosTheta, int n) { // find sinTheta from cosTheta double sinTheta = Math.Sqrt(1 - cosTheta * cosTheta); // to store required answer double ans = 0; // use to toggle sign in sequence. int toggle = 1; for ( int i = 0; i <= n; i += 2) { ans = ans + nCr[n,i] * Math.Pow(cosTheta, n - i) * Math.Pow(sinTheta, i) * toggle; toggle = toggle * -1; } return ans; } // Driver code public static void Main() { binomial(); double cosTheta = 0.5; int n = 10; Console.WriteLine(findCosnTheta(cosTheta, n)); } } // This code is contributed by 29AjayKumar |
Javascript
<script> // Javascript program to find the value of cos(n-theta) MAX = 16 var nCr = Array.from(Array(MAX), () => new Array(MAX)); // Function 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 cos(n-theta) function findCosnTheta(cosTheta, n) { // find sinTheta from cosTheta var sinTheta = Math.sqrt(1 - cosTheta * cosTheta); // to store required answer var ans = 0; // use to toggle sign in sequence. var toggle = 1; for ( var i = 0; i <= n; i += 2) { ans = ans + nCr[n][i] * Math.pow(cosTheta, n - i) * Math.pow(sinTheta, i) * toggle; toggle = toggle * -1; } return ans.toFixed(1); } // Driver code binomial(); var cosTheta = 0.5; var n = 10; document.write( findCosnTheta(cosTheta, n)); </script> |
Output:
-0.5
Time Complexity: O(MAX2)
Auxiliary Space: O(MAX2)
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!