# Program to find the value of P(N + r) for a polynomial of a degree N such that P(i) = 1 for 1 ≤ i ≤ N and P(N + 1) = a

• Difficulty Level : Expert
• Last Updated : 05 May, 2021

Given three positive integers N, R, and A and a polynomial P(X) of degree N, P(i) = 1 for 1 ≤ i ≤ N and the value of P(N + 1) is A, the task is to find the value of the P(N + R).

Examples:

Input: N = 1, R = 3, A = 2
Output: 4
Explanation:
The equation of the given polynomial is P(x) = x. Therefore, the value of P(N + R) = P(4) = 4.

Input: N = 2, R = 3, A = 1
Output: 1

Approach: The given problem can be solved by finding the expression of the given polynomial P(X) and then calculate the value of P(N + R). The general form of a polynomial with degree N is:

P(x) = k * (x – x1) * (x – x2) * (x – x3) * … *(x – xn) + c
where x1, x2, x3, …, xn are the roots P(x) where k and c are arbitrary constants.

Consider F(x) be another polynomial of degree N such that
F(x) = P(x) + c — (1)

Now, if c = -1, F(x) = 0 since P(x) = 1 for x ∈ [1, N].
⇒ F(x) has N roots which are equal to 1, 2, 3, …, N.
Therefore, F(x) = k * (x – 1) * (x – 2) * … * (x – N), for all c = -1.

Rearranging terms in equation (1),
P(x) = F(x) – c
P(x) = k * (x – 1) * (x – 2) * … *(x – N) + 1 — (2)

Putting x = N + 1 in equation (2),
k = (a – 1) / N!

Therefore, P(x) = ((a – 1)/N!) * (x – 1) * (x – 2) * … *(x – N) + 1 — (3)

Therefore, the idea is to substitute the value of (N + R) in equation (3) and print the value of the expression as the result. Follow the steps below to solve the problem:

• Initialize a variable, say ans, as the value of (A – 1) / N!.
• Iterate over the range [1, N] using the variable i and update the value of ans as ans * (N + R – i).
• After completing the above steps, print the value of (ans + 1) as the result.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to calculate``// factorial of N``int` `fact(``int` `n)``{``    ` `    ``// Base Case``    ``if` `(n == 1 || n == 0)``        ``return` `1;``        ` `    ``// Otherwise, recursively``    ``// calculate the factorial``    ``else``        ``return` `n * fact(n - 1);``}` `// Function to find the value of``// P(n + r) for polynomial P(X)``int` `findValue(``int` `n, ``int` `r, ``int` `a)``{``    ` `    ``// Stores the value of k``    ``int` `k = (a - 1) / fact(n);` `    ``// Store the required answer``    ``int` `answer = k;` `    ``// Iterate in the range [1, N] and``    ``// multiply (n + r - i) with answer``    ``for``(``int` `i = 1; i < n + 1; i++)``        ``answer = answer * (n + r - i);``        ` `    ``// Add the constant value C as 1``    ``answer = answer + 1;` `    ``// Return the result``    ``return` `answer;``}` `// Driver Code``int` `main()``{``    ``int` `N = 1;``    ``int` `A = 2;``    ``int` `R = 3;``    ` `    ``cout << (findValue(N, R, A));``    ` `    ``return` `0;``}` `// This code is contributed by mohit kumar 29`

## Java

 `// Java program for the above approach``import` `java.util.*;``class` `GFG{``  ` `// Function to calculate``// factorial of N``static` `int` `fact(``int` `n)``{``    ` `    ``// Base Case``    ``if` `(n == ``1` `|| n == ``0``)``        ``return` `1``;``        ` `    ``// Otherwise, recursively``    ``// calculate the factorial``    ``else``        ``return` `n * fact(n - ``1``);``}` `// Function to find the value of``// P(n + r) for polynomial P(X)``static` `int` `findValue(``int` `n, ``int` `r, ``int` `a)``{``    ` `    ``// Stores the value of k``    ``int` `k = (a - ``1``) / fact(n);` `    ``// Store the required answer``    ``int` `answer = k;` `    ``// Iterate in the range [1, N] and``    ``// multiply (n + r - i) with answer``    ``for``(``int` `i = ``1``; i < n + ``1``; i++)``        ``answer = answer * (n + r - i);``        ` `    ``// Add the constant value C as 1``    ``answer = answer + ``1``;` `    ``// Return the result``    ``return` `answer;``}` `// Driver Code``public` `static` `void` `main(String args[])``{``    ``int` `N = ``1``;``    ``int` `A = ``2``;``    ``int` `R = ``3``;``    ``System.out.print(findValue(N, R, A));``}` `}` `// This code is contributed by SURENDRA_GANGWAR.`

## Python3

 `# Python program for the above approach` `# Function to calculate``# factorial of N``def` `fact(n):``  ` `    ``# Base Case``    ``if` `n ``=``=` `1` `or` `n ``=``=` `0``:``        ``return` `1``      ` `    ``# Otherwise, recursively``    ``# calculate the factorial``    ``else``:``        ``return` `n ``*` `fact(n``-``1``)` `# Function to find the value of``# P(n + r) for polynomial P(X)``def` `findValue(n, r, a):` `    ``# Stores the value of k``    ``k ``=` `(a``-``1``) ``/``/` `fact(n)` `    ``# Store the required answer``    ``answer ``=` `k` `    ``# Iterate in the range [1, N] and``    ``# multiply (n + r - i) with answer``    ``for` `i ``in` `range``(``1``, n ``+` `1``):``        ``answer ``=` `answer``*``(n ``+` `r``-``i)` `    ``# Add the constant value C as 1``    ``answer ``=` `answer ``+` `1` `    ``# Return the result``    ``return` `answer`  `# Driver Code` `N ``=` `1``A ``=` `2``R ``=` `3` `print``(findValue(N, R, A))`

## C#

 `// C# program for the above approach``using` `System;` `class` `GFG{` `// Function to calculate``// factorial of N``static` `int` `fact(``int` `n)``{``    ` `    ``// Base Case``    ``if` `(n == 1 || n == 0)``        ``return` `1;``        ` `    ``// Otherwise, recursively``    ``// calculate the factorial``    ``else``        ``return` `n * fact(n - 1);``}` `// Function to find the value of``// P(n + r) for polynomial P(X)``static` `int` `findValue(``int` `n, ``int` `r, ``int` `a)``{``    ` `    ``// Stores the value of k``    ``int` `k = (a - 1) / fact(n);` `    ``// Store the required answer``    ``int` `answer = k;` `    ``// Iterate in the range [1, N] and``    ``// multiply (n + r - i) with answer``    ``for``(``int` `i = 1; i < n + 1; i++)``        ``answer = answer * (n + r - i);``        ` `    ``// Add the constant value C as 1``    ``answer = answer + 1;` `    ``// Return the result``    ``return` `answer;``}` `// Driver Code``static` `public` `void` `Main()``{``    ``int` `N = 1;``    ``int` `A = 2;``    ``int` `R = 3;``    ` `    ``Console.Write((findValue(N, R, A)));``}``}` `// This code is contributed by code_hunt`

## Javascript

 ``
Output:
`4`

Time Complexity: O(N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up