拉格朗日插值更是好的。
这个算法的用途是,给出 个点,第个点为,它可以找出一个 次的多项式,以便求出值为其他情况。
当然也是可以用来整活的,可以构造一些奇奇怪怪的多项式坑人。
首先这个多项式存在是显然的,然后我们求它的方式是一个构造。
我们考虑跟中国剩余定理一个思路,对于,我们考虑其他的项都消成 ,只有一项为,就构造出来了。
那么,我们不难想象出一个函数来处理的影响:
对于其他的,这一项一定可以消成 ,而对于,则式子刚好为,也就符合了条件。
于是我们构造出:
我们就可以求解了,时间复杂度为,核心实现如下。
for(int i=1;i<=n;i++)
{
cnt1=1,cnt2=1;
for(int j=1;j<=n;j++)
{
if(i==j)continue;
cnt1=cnt1*(k-x[j])%mod;
cnt2=cnt2*(x[i]-x[j])%mod;
}
ans=(ans+y[i]*cnt1%mod*ksm(cnt2,mod-2)%mod+mod)%mod;
}