多项式算法学习记录

多项式

单纯记录一下

  1. 拉格朗日插值
    大佬博客链接

    f ( k ) = ∑ i = 0 n y i ∏ i ≠ j k − x [ j ] x [ i ] − x [ j ] f(k) = \sum_{i = 0}^{n} y_i \prod_{i \not = j} \frac{k - x[j]}{x[i] - x[j]} f(k)=i=0nyii=jx[i]x[j]kx[j]
    普通拉格朗日插值代码如下

ll x[maxn],y[maxn];
ll solve(int n,ll k)
{
    ll ans=0;
    for(int i=1;i<=n;i++)
    {
        ll tmp1=y[i],tmp2=1;
        for(int j=1;j<=n;j++)
        {
            if(i==j) continue;
            tmp1=tmp1*((k-x[j])%mod)%mod;
            tmp1=(tmp1+mod)%mod;
            tmp2=tmp2*(x[i]-x[j])%mod;
            tmp2=(tmp2+mod)%mod;
        }
        ans=ans+tmp1*qpow(tmp2,mod-2,mod)%mod;
        ans%=mod;
    }
    return ans;
}

已做题目洛谷p4593,用到了如下知识点

1 k + 2 k + 3 k . . . + n k 1^{k}+2^k+3^k...+n^k 1k+2k+3k...+nk可以写为一个k+1次多项式。
重心拉格朗日插值
f ( k ) = ∑ i = 1 n y i ∏ i ≠ j k − x [ j ] x [ i ] − x [ j ] f(k) = \sum_{i = 1}^{n} y_i \prod_{i \not= j} \frac{k - x[j]}{x[i] - x[j]} f(k)=i=1nyii=jx[i]x[j]kx[j]
g = ∏ i = 1 n k − x [ i ] g=\prod_{i =1}^{n}{k-x[i]} g=i=1nkx[i]
f ( k ) = g ∑ i = 1 n 1 ( k − x [ i ] ) ∏ i ≠ j y i ( x [ i ] − x [ j ] ) f(k) = g\sum_{i = 1}^{n}\frac{1}{(k-x[i])} \prod_{i \not = j} \frac{y_i}{(x[i] - x[j])} f(k)=gi=1n(kx[i])1i=j(x[i]x[j])yi
t = ∏ i ≠ j y i ( x [ i ] − x [ j ] ) t=\prod_{i \not = j} \frac{y_i}{(x[i] - x[j])} t=i=j(x[i]x[j])yi
f ( k ) = g ∑ i = 1 n t i k − x [ i ] f(k)=g\sum_{i=1}^{n}\frac{t_{i}}{k-x[i]} f(k)=gi=1nkx[i]ti
这样新加入的点只需计算t即可。
2. 待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值