「多項式求導」
阿新 • • 發佈:2020-12-30
「多項式求導」
前置芝士
導數
微積分
基本問題
給定一個 \(n\) 次多項式 \(F(x)\),求 \(F'(x)\) 。
設
\[F(x)=\sum^{n}_{i=0}a_ix^i \]\[F(x+dx)=\sum^{n}_{i=0}a_i(x+dx)^i \]\[F(x+dx)=\sum^{n}_{i=0}a_i(\binom{i}{0}x^i+\binom{i}{1}x^{i-1}dx+\binom{i}{2}x^{i-2}dx^2+...+\binom{i}{i-1}xdx^{i-1}+\binom{i}{i}dx^i) \]\[F(x+dx)-F(x)=\sum^{n}_{i=1}a_i(\binom{i}{1}x^{i-1}dx+\binom{i}{2}x^{i-2}dx^2+...+\binom{i}{i-1}xdx^{i-1}+\binom{i}{i}dx^i) \]\(PS\):因為第 \(0\) 次項只有一個常數,被直接減掉了,所以直接從 \(i=1\) 開始枚舉了。
\[F'(x)=\frac{F(x+dx)-F(x)}{dx}=\sum^{n}_{i=1}a_i\binom{i}{1}x^{i-1} \]\(PS\):從 \(i=2\) 往後的項因為其中的 \(dx\) 沒有全部消掉,且 \(\lim_{dx\to 0}\),直接變成 \(0\) 了。
\[F'(x)=\sum^{n}_{i=0}a_{i + 1}(i+1)x^i \]很容易發現,其實就是求導之前的多項式係數整體左移一位再乘上一個 \(i+1\),得到的就是它的導數。
程式碼
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> typedef long long ll; typedef unsigned long long ull; using namespace std; const int maxn = 3e5 + 50, INF = 0x3f3f3f3f, mod = 998244353, inv3 = 332748118; inline int read () { register int x = 0, w = 1; register char ch = getchar (); for (; ch < '0' || ch > '9'; ch = getchar ()) if (ch == '-') w = -1; for (; ch >= '0' && ch <= '9'; ch = getchar ()) x = x * 10 + ch - '0'; return x * w; } inline void write (register int x) { if (x / 10) write (x / 10); putchar (x % 10 + '0'); } int n; int f[maxn]; int df[maxn]; int main () { n = read(); for (register int i = 0; i <= n; i ++) f[i] = read(); for (register int i = 0; i <= n - 1; i ++) df[i] = 1ll * f[i + 1] * (i + 1) % mod; return 0; }