Given polynomial string str, the task is to differentiate the given string and print the string after differentiating it.
Note: The input format is such that there is a white space between a term and the ‘+’, ’-’ symbol
Examples:
Input: str = “4X3 + 3X1 + 2X2”
Output: “12X2 + 3X0 + 4X1”
Explanation:
The derivative of p(x) = A*XN is p'(x) = A * N * XN – 1
Input: str = “5X4 + 6X2 + 5X2”
Output: “20X3 + 12X1 + 10X1”
Approach: The idea is to observe that when the given equation consists of multiple polynomials
, the differentiation of the given polynomial
. And, it is known that the derivative of
is
Therefore, we split the given string and differentiate every term in it.
Below is the implementation of the above approach:
C++
// C++ program to differentiate the // given polynomial #include "bits/stdc++.h" #define MOD (1e9 + 7); using ll = int64_t; using ull = uint64_t; #define ll long long using namespace std; // Function to differentiate the // given term string diffTerm(string pTerm) { // Get the coefficient string coeffStr = "" , S = "" ; int i; // Loop to get the coefficient for (i = 0; pTerm[i] != 'x' ; i++) coeffStr.push_back(pTerm[i]); long long coeff = atol (coeffStr.c_str()); // Loop to get the power of each term string powStr = "" ; for (i = i + 2; i != pTerm.size(); i++) powStr.push_back(pTerm[i]); long long power = atol (powStr.c_str()); string a, b; // Converting the value // to the string ostringstream str1, str2; // For ax^n, we find (n)*a*x^(n-1) coeff = coeff * power; str1 << coeff; a = str1.str(); power--; str2 << power; b = str2.str(); S += a + "X^" + b; return S; } // Function to differentiate the // given polynomial string diffstr(string& poly) { // We use istringstream to get // the input in tokens istringstream is(poly); string pTerm, S = "" ; // For every token, compute the // differentiation while (is >> pTerm) { // If the token is equal to // '+', '-' then // continue with the string if (pTerm == "+" ) { S += " + " ; continue ; } if (pTerm == "-" ) { S += " - " ; continue ; } // Otherwise find the differentiation // of that particular term else S += diffTerm(pTerm); } return S; } // Driver code int main() { string str = "5x^4 + 6x^2 + 5x^2" ; cout << diffstr(str); return 0; } |
Java
import java.util.Scanner; import java.util.StringTokenizer; public class DifferentiatePolynomial { static String diffTerm(String pTerm) { // Get the coefficient String coeffStr = "" , S = "" ; int i; // Loop to get the coefficient for (i = 0 ; pTerm.charAt(i) != 'x' ; i++) { coeffStr = coeffStr + pTerm.charAt(i); } long coeff = Long.parseLong(coeffStr); // Loop to get the power of each term String powStr = "" ; for (i = i + 2 ; i != pTerm.length(); i++) { powStr = powStr + pTerm.charAt(i); } long power = Long.parseLong(powStr); String a, b; // Converting the value // to the string StringBuilder str1 = new StringBuilder(); StringBuilder str2 = new StringBuilder(); // For ax^n, we find (n)*a*x^(n-1) coeff = coeff * power; str1.append(Long.toString(coeff)); a = str1.toString(); power--; str2.append(Long.toString(power)); b = str2.toString(); S = S + a + "X^" + b; return S; } static String diffstr(String poly) { String pTerm, S = "" ; StringTokenizer st = new StringTokenizer(poly, " +" ); // For every token, compute the differentiation while (st.hasMoreTokens()) { pTerm = st.nextToken(); // If the token is equal to '+', '-' then continue with the string if (pTerm.equals( "+" )) { S = S + " + " ; continue ; } if (pTerm.equals( "-" )) { S = S + " - " ; continue ; } // Otherwise find the differentiation of that particular term else { S = S + diffTerm(pTerm)+ "+" ; } } return S; } public static void main(String[] args) { String poly = "5x^4+6x^2+5x^2" ; String ans = diffstr(poly); System.out.println(ans.substring( 0 ,ans.length()- 1 )); } } |
Python3
# Python3 program to differentiate # the given polynomial MOD = ( 1e9 + 7 ) # Function to differentiate # the given term def diffTerm(pTerm): # Get the coefficient coeffStr = "" S = "" # Loop to get the # coefficient i = 0 while (i < len (pTerm) and pTerm[i] ! = 'x' ): coeffStr + = (pTerm[i]) i + = 1 coeff = int (coeffStr) # Loop to get the power # of each term powStr = "" j = i + 2 while j < len (pTerm): powStr + = (pTerm[j]) j + = 1 power = int (powStr) # For ax^n, we find # (n)*a*x^(n-1) coeff = coeff * power a = str (coeff) power - = 1 b = str (power) S + = a + "X^" + b return S # Function to differentiate # the given polynomial def diffstr(poly): pTerm = poly.split( " " ) S = "" for i in range ( len (pTerm)): # If the token is equal to # '+', '-' then # continue with the string if (pTerm[i] = = "+" ): S + = " + " continue if (pTerm[i] = = "-" ): S + = " - " continue # Otherwise find the differentiation # of that particular term else : S + = diffTerm(pTerm[i]) return S # Driver code if __name__ = = "__main__" : st = "5x^4 + 6x^2 + 5x^2" print (diffstr(st)) # This code is contributed by Chitranayal |
C#
// C# program to differentiate the // given polynomial using System; using System.Collections.Generic; class GFG { // Function to differentiate the // given term static string diffTerm( string pTerm) { // Get the coefficient string coeffStr = "" , S = "" ; int i; // Loop to get the coefficient for (i = 0; pTerm[i] != 'x' ; i++) coeffStr += (pTerm[i]); long coeff = Convert.ToInt64(coeffStr); // Loop to get the power of each term string powStr = "" ; for (i = i + 2; i != pTerm.Length; i++) powStr += (pTerm[i]); long power = Convert.ToInt64(powStr); string a, b; // For ax^n, we find (n)*a*x^(n-1) coeff = coeff * power; a = Convert.ToString(coeff); power--; b = Convert.ToString(power); S += a + "X^" + b; return S; } // Function to differentiate the // given polynomial static string diffstr( string poly) { // We use istringstream to get // the input in tokens string [] is1 = poly.Split( " " ); string S = "" ; // For every token, compute the // differentiation foreach ( string pTerm in is1) { // If the token is equal to // '+', '-' then // continue with the string if (pTerm == "+" ) { S += " + " ; continue ; } if (pTerm == "-" ) { S += " - " ; continue ; } // Otherwise find the differentiation // of that particular term else S += diffTerm(pTerm); } return S; } // Driver code public static void Main( string [] args) { string str = "5x^4 + 6x^2 + 5x^2" ; Console.WriteLine(diffstr(str)); } } // This code is contributed by phasing17. |
Javascript
// JS program to differentiate the // given polynomial let MOD = (1e9 + 7); // Function to differentiate the // given term function diffTerm(pTerm) { // Get the coefficient let coeffStr = "" , S = "" ; let i; // Loop to get the coefficient for (i = 0; pTerm[i] != 'x' ; i++) coeffStr += (pTerm[i]); let coeff = parseInt(coeffStr); // Loop to get the power of each term let powStr = "" ; for (i = i + 2; i != pTerm.length; i++) powStr += (pTerm[i]); let power = parseInt(powStr); let a = "" ; let b = "" ; // Converting the value // to the string let str1, str2; // For ax^n, we find (n)*a*x^(n-1) coeff = coeff * power; str1 = coeff; a = str1; power--; str2 = power; b = str2; S += a + "X^" + b; return S; } // Function to differentiate the // given polynomial function diffstr( poly) { // We use istringstream to get // the input in tokens let is = poly.split( " " ); let pTerm = "" , S = "" ; // For every token, compute the // differentiation for (pTerm of is) { // If the token is equal to // '+', '-' then // continue with the string if (pTerm == "+" ) { S += " + " ; continue ; } if (pTerm == "-" ) { S += " - " ; continue ; } // Otherwise find the differentiation // of that particular term else S += diffTerm(pTerm); } return S; } // Driver code let str = "5x^4 + 6x^2 + 5x^2" ; console.log(diffstr(str)); // This code is contributed by phasing17 |
20X^3 + 12X^1 + 10X^1
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!