拉格朗日插值模板

本文介绍了拉格朗日插值的基本公式,并通过实例展示了如何使用该公式进行插值计算,特别是详细讨论了如何求解Σ(i=1->n)ik的问题。此外,还提供了拉格朗日插值法的通用公式,用于计算任意函数在特定点的插值结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拉格朗日根本公式:y=Σ(i=0->n-1)[yk*(j!=k)(x-xj)][(j!=k)(xj-xk)]

拉格朗日插值法求:Σ(i=1->n)ik

拉格朗日插值法公式:f(n)=Σ(i=1->k+2)(-1)k-i+2f(i)[Σ(j=1->k+2)(n-j)]/[(n-i)*(i-1)!*(k+2-i)!]

int f[maxn],fac[maxn]; 
int Qpow( int a , int b )
{
    int res = 1;
    while ( b )
    {
        if ( b&1 )
            res = 1LL*res*a%mod;
        a = 1LL*a*a%mod;
        b = b>>1;
    }
    return res;
}
void slove( int n , int k )
{
    for ( int i=1 ; i<=k+2 ; i++ )
        f[i] = (f[i-1]+Qpow(i,k))%mod;
    if ( n<=k+2 )
        printf ( "%d\n" , f[n] );
    else
    {
        fac[0] = 1;
        for ( int i=1 ; i<=k+2 ; i++ )
            fac[i] = 1LL*i*fac[i-1]%mod;
        int cur = 1,ans = 0;
        for ( int i=1 ; i<=k+2 ; i++ )
            cur = 1LL*cur*(n-i)%mod;
        for ( int i=1 ; i<=k+2 ; i++ )
        {
            int inv1 = Qpow( n-i , mod-2 );
            int inv2 = Qpow( 1LL*fac[i-1]*fac[k+2-i]%mod , mod-2 );
            int sign = (k+2-i)%2?-1:1;
            ans = (ans+1LL*sign*inv1*inv2%mod*f[i]%mod*cur%mod)%mod;
            ans = (ans+mod)%mod;
        }
        printf ( "%d\n" , ans );
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值