zoukankan      html  css  js  c++  java
  • 「多项式求导」

    前置芝士

    导数

    微积分

    基本问题

    给定一个 (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(inom{i}{0}x^i+inom{i}{1}x^{i-1}dx+inom{i}{2}x^{i-2}dx^2+...+inom{i}{i-1}xdx^{i-1}+inom{i}{i}dx^i) ]

    [F(x+dx)-F(x)=sum^{n}_{i=1}a_i(inom{i}{1}x^{i-1}dx+inom{i}{2}x^{i-2}dx^2+...+inom{i}{i-1}xdx^{i-1}+inom{i}{i}dx^i) ]

    (PS):因为第 (0) 次项只有一个常数,被直接减掉了,所以直接从 (i=1) 开始枚举了。

    [F'(x)=frac{F(x+dx)-F(x)}{dx}=sum^{n}_{i=1}a_iinom{i}{1}x^{i-1} ]

    (PS):从 (i=2) 往后的项因为其中的 (dx) 没有全部消掉,且 (lim_{dx o 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;
    }
    
  • 相关阅读:
    SQL未能排它地锁定数据库以执行该操作解决
    SQL日志文件丢失,只有MDF恢复
    ASP.Net2.0使用Log4Net(一)
    ASP.NET使用Memcached高缓存实例(初级教程)
    ASP.Net2.0使用Log4Net(二)
    Windows Server 2003域控制器的建立
    什么是SIP?
    [转].NET破解体验 ildasm.exe的使用
    Memcached深度分析(转载)
    X509证书帮助类
  • 原文地址:https://www.cnblogs.com/Rubyonly233/p/14208879.html
Copyright © 2011-2022 走看看