Program to find the value of sin(nΘ)
Given the value of sin(?) and a variable n<=15. The task is to find the value of sin(n?) using property of trigonometric functions.
Examples:
Input: sin(?)=0.5, n=1
Output: 0.5
Input: sin(?)=0.5, n=10
Output: -0.866025
Approach: This problem can be solved using De moivre’s theoremand Binomial theorem
Now, we have both sin(?) and cos(?). Put the value in equation to get your answer.
Below is the implementation of above approach:
C++
#include <bits/stdc++.h>
#define ll long long int
#define MAX 16
using namespace std;
ll nCr[MAX][MAX] = { 0 };
void binomial()
{
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];
}
}
}
double findCosNTheta( double sinTheta, ll n)
{
double cosTheta = sqrt (1 - sinTheta * sinTheta);
double ans = 0;
ll toggle = 1;
for ( int i = 1; i <= n; i += 2) {
ans = ans + nCr[n][i] * pow (cosTheta, n - i)
* pow (sinTheta, i) * toggle;
toggle = toggle * -1;
}
return ans;
}
int main()
{
binomial();
double sinTheta = 0.5;
ll n = 10;
cout << findCosNTheta(sinTheta, n) << endl;
return 0;
}
|
Java
public class GFG {
private static final int MAX = 16 ;
static long nCr[][] = new long [MAX][MAX];
static void binomial()
{
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 ];
}
}
}
static double findCosNTheta( double sinTheta, int n)
{
double cosTheta = Math.sqrt( 1 - sinTheta * sinTheta);
double ans = 0 ;
long toggle = 1 ;
for ( int i = 1 ; i <= n; i += 2 ) {
ans = ans + nCr[n][i] * Math.pow(cosTheta, n - i)
* Math.pow(sinTheta, i) * toggle;
toggle = toggle * - 1 ;
}
return ans;
}
public static void main (String args[]){
binomial();
double sinTheta = 0.5 ;
int n = 10 ;
System.out.println(findCosNTheta(sinTheta, n));
}
}
|
Python3
import math
MAX = 16
nCr = [[ 0 for i in range ( MAX )] for i in range ( MAX )]
def binomial():
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 ]
def findCosNTheta(sinTheta,n):
cosTheta = math.sqrt( 1 - sinTheta * sinTheta)
ans = 0
toggle = 1
for i in range ( 1 ,n + 1 , 2 ):
ans = (ans + nCr[n][i] * (cosTheta * * (n - i))
* (sinTheta * * i) * toggle)
toggle = toggle * - 1
return ans
if __name__ = = '__main__' :
binomial()
sinTheta = 0.5
n = 10
print (findCosNTheta(sinTheta, n))
|
C#
using System;
class GFG
{
private static int MAX = 16;
static long [,] nCr = new long [MAX, MAX];
static void binomial()
{
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];
}
}
}
static double findCosNTheta( double sinTheta, int n)
{
double cosTheta = Math.Sqrt(1 - sinTheta *
sinTheta);
double ans = 0;
long toggle = 1;
for ( int i = 1; i <= n; i += 2)
{
ans = ans + nCr[n, i] * Math.Pow(cosTheta, n - i) *
Math.Pow(sinTheta, i) * toggle;
toggle = toggle * -1;
}
return ans;
}
public static void Main ()
{
binomial();
double sinTheta = 0.5;
int n = 10;
Console.Write(findCosNTheta(sinTheta, n));
}
}
|
PHP
<?php
$MAX =16;
$nCr = array_fill (0, $MAX , array_fill (0, $MAX ,0));
function binomial()
{
global $MAX , $nCr ;
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 findCosNTheta( $sinTheta , $n )
{
global $MAX , $nCr ;
$cosTheta = sqrt(1 - $sinTheta * $sinTheta );
$ans = 0;
$toggle = 1;
for ( $i = 1; $i <= $n ; $i += 2) {
$ans = $ans + $nCr [ $n ][ $i ] * pow( $cosTheta , $n - $i )
* pow( $sinTheta , $i ) * $toggle ;
$toggle = $toggle * -1;
}
return $ans ;
}
binomial();
$sinTheta = 0.5;
$n = 10;
echo findCosNTheta( $sinTheta , $n );
?>
|
Javascript
<script>
MAX = 16
var nCr = Array.from(Array(MAX), () => new Array(MAX));
function binomial()
{
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 findCosNTheta(sinTheta, n)
{
var cosTheta = Math.sqrt(1 - sinTheta * sinTheta);
var ans = 0;
var toggle = 1;
for ( var i = 1; 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(6);
}
binomial();
var sinTheta = 0.5;
var n = 10;
document.write( findCosNTheta(sinTheta, n));
</script>
|
Time Complexity: O(MAX2)
Auxiliary Space: O(MAX2)
Last Updated :
31 Aug, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...